public class Developer
{
public string Name { get; set; }
public string Technology { get; set; }
}
public class Test
{
public static void Main(string[] args)
{
List<Developer> developers = new List<Developer> {
new Developer {Name = "Pedro", Technology = "Java"},
new Developer {Name = "Manel", Technology = ".NET"},
new Developer {Name = "Oscar", Technology = ".NET"},
new Developer {Name = "Noe", Technology = "Java"},
new Developer {Name = "Elias", Technology = "Java"}
};
developers.Sort(delegate(Developer x, Developer y)
{
if (x == null)
return -1;
else if (y == null)
return 1;
else
return string.Compare(x.Name, y.Name);
});
}
}
Se haría en Java con una clase anónima.
public class Developer
{
private String name;
private String technology;
public Developer(String name, String technology) {
this.name = name;
this.technology = technology;
}
public String getName() {
return name;
}
public String getTechnology() {
return technology;
}
}
public class Test {
public static void main(String args[]) {
List<Developer> developers = Arrays.asList(
new Developer ("Pedro", "Java"),
new Developer ("Manel", ".NET"),
new Developer ("Oscar", ".NET"),
new Developer ("Noe", "Java"),
new Developer ("Elias", "Java")
);
Collections.sort(developers, new Comparator<Developer>() {
public int compare(Developer o1, Developer o2) {
if (o1 == null || o1.getName()==null)
return -1;
else if (o2 == null || o2.getName()==null)
return 1;
else
return o1.getName().compareTo(o2.getName());
}
});
}
}
Si bien es cierto que .NET también tiene la forma Java de hacer las cosas, lo habitual es que se use el delegado ( o directamente el nombre de una función que haga la ordenación). Y si, en Java ocupa más lineas, pero todos los IDEs escriben los getters y los setters.
Bueno, que en Java no se use directamente punteros no significa que no los haya, y tampoco significa que no puedan ser conscientes de ello...
ResponderEliminarSiempre subyacen punteros, es cierto. Pero queda raro que si no puedes usar punteros a variables puedas usar punteros a métodos, ¿no?
ResponderEliminarRealmente .net es una amalgama de tecnologías y se pueden usar punteros envueltos en objetos ( el tipo IntPtr, por ejemplo ) para manejar APIs nativas. Pero me refiero a que en OOP no es habitual usarlos, y sin embargo, los delegados si que se usan con mucha frecuencia.
Eso si, son cómodos. Otra cosa es que en Java se pueda vivir sin ellos.