Estoy usando Apache Commons EqualsBuilder para construir el método equals para una clase interna Java no estática. Por ejemplo:¿Cómo hacer referencia a la clase externa en otra instancia de una clase interna no estática?
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
}
}
¿Existe la sintaxis mediante el cual puedo referir a other
's Foo
referencia, aparte de declarar el método getMyFoo()
? Algo como other.Foo.this
(que no funciona)?
Supongamos que el constructor de Bar es privado y casos son creados por métodos de fábrica definidos en Foo; también, cada instancia de barra debe estar sujeta a una instancia de Foo es posible hacer esto con las clases internas estáticas,. pero el objetivo de la función de idioma es simplificar dicho uso. –
Ah, y ambas clases es necesario poder referirse a los miembros privados de los demás. –
En mi caso particular, Bar es abstracto y los métodos de fábrica devuelven objetos de clases anónimas que se extienden a Bar, que implementan un método público definido como abstracto en Bar; las implementaciones se cierran sobre el alcance de los argumentos pasados a los métodos de fábrica respectivos. –