2010-10-03 9 views
15

Ich habe einfache Klasse Point mit zwei Feldern des Typs double. Ich habe Eclipse 3.6 gebeten, dafür equals() und hashCode() zu generieren. Die equals() Methode sieht wie folgt aus:equals() generiert von 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; 
} 

Und die getOuterType sieht wie folgt aus:

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

So ist die Frage: Was ist der Zweck der getOuterType().equals(other.getOuterType()) Linie?

+0

Haben Sie eine innere Klasse? – Bozho

+0

Es stellt sich heraus, dass ich, danke, es ist gelöst. –

Antwort

13

Nun, wenn Ihre Klasse eine innere Klasse (nicht-statische geschachtelte Klasse) ist, hat sie eine äußere, umschließende Instanz. Zwei Objekte eines inneren Klassentyps sind nicht wirklich gleich, es sei denn, die umschließenden Instanzen sind auch gleich; die äußere Instanz wie ein verstecktes Feld (normalerweise this$0 von javac).

+0

Eclipse scheint zu denken, dass es eine innere Klasse ist. Sonst würde es keine "getOuterType" -Methode erzeugen. – Grodriguez

+0

Danke, Chris! Die Frage kam eigentlich von meinem Schüler, es scheint, dass er seine Klasse wirklich in eine andere gelegt hat. (Ich kann das nicht auf meinem Computer reproduzieren, bis die Klasse nach der Antwort in die andere gelegt wurde.) –

+0

Grodriguez, ja, danke! –

Verwandte Themen