2010-10-03 17 views
15

Tengo punto de clase simple con dos campos de tipo double. Le pedí a Eclipse 3.6 que generara equals() y hashCode(). El método equals() se ve así:equals() generado por Eclipse: getOuterType()?

@Override 
public boolean equals(Object obj) { 
    if (this == obj) 
     return true; 
    if (obj == null) 
     return false; 
    if (getClass() != obj.getClass()) 
     return false; 
    Point other = (Point) obj; 
    if (!getOuterType().equals(other.getOuterType())) 
     return false; 
    if (Double.doubleToLongBits(x) != Double.doubleToLongBits(other.x)) 
     return false; 
    if (Double.doubleToLongBits(y) != Double.doubleToLongBits(other.y)) 
     return false; 
    return true; 
} 

Y el getOuterType se ve así:

private Point getOuterType() { 
    return Point.this; 
} 

Entonces la pregunta es: ¿cuál es el propósito de getOuterType().equals(other.getOuterType()) línea?

+0

¿Tiene usted una clase interna? – Bozho

+0

Resulta que tengo, gracias, está resuelto. –

Respuesta

13

Bueno, si su clase es una clase interna (clase anidada no estática), tiene una instancia externa que lo encierra. Dos objetos de un tipo de clase interna no son realmente iguales a menos que las instancias envolventes también sean iguales; la instancia externa como un campo oculto (generalmente llamado this$0 por javac).

+0

Eclipse parece pensar que es una clase interna. De lo contrario, no generaría un método 'getOuterType'. – Grodriguez

+0

¡Gracias, Chris! La pregunta en realidad vino de mi alumno, parece que realmente puso a su clase dentro de otra. (No puedo reproducir esto en mi computadora hasta que ponga la clase dentro de otro después de su respuesta.) –

+0

Grodriguez, sí, ¡gracias! –

Cuestiones relacionadas