Ich benutze den Apache Commons EqualsBuilder, um die equals-Methode für eine nicht statische innere Java-Klasse zu erstellen. Zum Beispiel:Wie verweist man auf die äußere Klasse in einer anderen Instanz einer nicht statischen inneren Klasse?
import org.apache.commons.lang.builder.EqualsBuilder;
public class Foo {
public class Bar {
private Bar() {}
public Foo getMyFoo() {
return Foo.this
}
private int myInt = 0;
public boolean equals(Object o) {
if (o == null || o.getClass() != getClass) return false;
Bar other = (Bar) o;
return new EqualsBuilder()
.append(getMyFoo(), other.getMyFoo())
.append(myInt, other.myInt)
.isEquals();
}
}
public Bar createBar(...) {
//sensible implementation
}
public Bar createOtherBar(...) {
//another implementation
}
public boolean equals(Object o) {
//sensible equals implementation
}
}
Gibt es Syntax, mit denen ich zu other
‚s Foo
Referenz verweisen neben Deklarieren der getMyFoo()
Methode? So etwas wie other.Foo.this
(was nicht funktioniert)?
Angenommen, Bar Konstruktor ist privat und Instanzen von Factory-Methoden definierten auf Foo erstellt, auch jede Instanz von Bar sollte zu einer Instanz von Foo gebunden Es ist möglich, dies mit statischen inneren Klassen zu tun. aber der springende Punkt des Sprachfeatures ist, solche Verwendung zu vereinfachen. –
Oh, und beide Klasse Es muss möglich sein, sich auf die privaten Mitglieder des anderen zu beziehen. –
In meinem speziellen Fall ist Bar abstrakt, und die Factory-Methoden geben Objekte von anonymen Klassen zurück, die Bar erweitern, die eine öffentliche Methode implementieren, die in Bar als abstrakt definiert ist; Die Implementierungen schließen den Bereich der Argumente, die an die jeweiligen Factory-Methoden übergeben werden. –