J'utilise Apache Commons EqualsBuilder pour construire la méthode equals pour une classe interne Java non statique. Par exemple:Comment faire référence à la classe externe dans une autre instance d'une classe interne non statique?
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
}
}
Y at-il une syntaxe par laquelle je peux me référer à other
« s en dehors référence Foo
de déclarer la méthode getMyFoo()
? Quelque chose comme other.Foo.this
(qui ne fonctionne pas)?
On suppose que le constructeur de Bar est privé et les instances sont créées par des méthodes définies en usine sur Foo, également, chaque instance de barre doit être liée à une instance de Foo Il est possible de le faire avec les classes internes statiques,. mais le but de la fonction de langage est de simplifier cet usage –
Oh, et les deux classes Il faut pouvoir se référer aux membres privés des autres. –
Dans mon cas particulier, Bar est abstrait et les méthodes usine retournent des objets de classes anonymes étendant Bar qui implémente une méthode publique définie comme abstraite dans Bar; les implémentations ferment sur la portée des arguments passés aux méthodes d'usine respectives. –