Java - Object

 
Vista:

Object

Publicado por novato (6 intervenciones) el 19/01/2007 04:56:34
hola

tengo que hacer una clase que implemente Comparable de java, el metodo de Comparable es: public int compareTo(Object o)
el problema es que donde dice Object necesito colocar MiClase sin tener que hacer otro metodo
como hago para manipular Object, ya probe con Object<MiClase> pero sale un error

ayuda por favor, no puedo utilizar otro metodo porque me piden ese
gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Object

Publicado por Gonzalo (180 intervenciones) el 19/01/2007 12:09:23
Donde pone Object, debe seguir poniendo Object, y no MiClase.

Lo que tienes que hacer es, una vez dentro del método, comprobar que tipo de objeto te han pasado.

Es decir, que harías algo así:

public int compareTo(Object objeto) {
if (objeto instanceof MiClase) { // Si objeto es realmente una instancia de MiClase...
MiClase copia = (MiClase) objeto; // Lo convierto a un objeto de tipo MiClase
// Y aquí ya harías las comprobaciones que sean adecuadas.
} else {
// Y si es otra cosa... (*)
throw new ClassCastException("No se puede comparar MiClase con objetos de tipo " + objeto.getClass().getName());
}
return ...;
}

(*) Si el objeto que te pasan no es una instancia de MiClase, puedes hacer varias cosas. Lo más apropiado es lanzar una excepción hacia arriba, pero a lo mejor prefieres otra cosa.

De hecho, también puedes lanzar la excepción tal cual cuando ocurra sin tener que ocuparte tu:
public int compareTo(Object objeto) {
MiClase copia = (MiClase) objeto; // Lo convierto a un objeto de tipo MiClase
// Y si la linea anterior falla, salta la excepción directamente.
// Aquí ya harías las comprobaciones que sean adecuadas.

return ...;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Object

Publicado por Joni (8 intervenciones) el 19/01/2007 14:05:59
> Lo más apropiado es lanzar una excepción hacia
> arriba, pero a lo mejor prefieres otra cosa.

No estoy de acuerdo, en mi opinion lo mas apropiado posible sería devolver false.

Equals es un metodo que el API de Java usa en varios lugares, particularmente en colecciones de objetos. Esto significa que nunca puedes saber desde donde la llamada a equals viene ni con que tipo de parametro. Realmente no es un caso excepcional que el parametro sea un objeto de otra clase. Además, como nunca sabes quien va a llamar a equals, lanzar una excepcion sería como lanzarla desde un punto aleatorio del programa, lo que haría todo el programa inestable.

No olvidemos que equals() tiene que cumplir un contrato bastante estricto. Por desgracia es muy facil romper el contrato sin darse cuenta. Además, cuando implementas equals también tienes que implementar hashCode() porque tienen que ser consistentes. Capitulo 3 de "Effective Java" por Joshua Bloch enseña como implementar correctamente equals() y otros metodos importantes de Object. Se lo puede descargar en http://java.sun.com/docs/books/effective/chapters.html
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Object

Publicado por Joni (8 intervenciones) el 19/01/2007 14:19:24
Ups, sorry chicos, leí mal, este hilo va de compareTo(), no equals() :)

En compareTo la cosa apropiada sí que es lanzar una excepción ya que lo dice la documentación: "Throws: ClassCastException - if the specified object's type prevents it from being compared to this Object."

El método compareTo() también tiene un contrato complicado, aún más que el de equals(), pero el capitulo 3 de Effective Java da pistas de como implementarlo. Mirar el enlace del post anterior.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar