una que privada otra objeto nombre llevan internas estaticas dentro crear clases clase anonimas java syntax reference inner-classes

java - que - ¿Cómo hacer referencia a la clase externa en otra instancia de una clase interna no estática?



crear un objeto de una clase dentro de otra clase (3)

No, no es posible sin un getter. La palabra clave ''this'' siempre apuntará a la instancia actual. Tengo curiosidad por saber por qué querrías hacer esto ... parece que estás haciendo composición de la manera incorrecta.

public class Foo { public Bar createBar(){ Bar bar = new Bar(this) return bar; } } public class Bar { Foo foo; public Bar(Foo foo){ this.foo = foo; } public boolean equals(Object other) { return foo.equals(other.foo); } }

Desde el uso de Foo.this limita la creación de la clase interna (Foo myFoo = new Foo (); myFoo.new Bar (); a una instancia, diría que esto es mucho más limpio.

Estoy usando Apache Commons EqualsBuilder para construir el método equals para una clase interna Java no estática. Por ejemplo:

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 } }

¿Hay sintaxis mediante la cual puedo referirme a la referencia Foo además de declarar el método getMyFoo() ? Algo así como other.Foo.this (que no funciona)?


No.

Probablemente la mejor manera sea la que sugeriste: agrega un método getFoo () a tu clase interna.


sí:

public class Foo { public class Bar { public Foo getMyFoo() { return Foo.this; } } public Foo foo(Bar bar) { return bar.getMyFoo(); } public static void main(String[] arguments) { Foo foo1=new Foo(); Bar bar1=foo1.new Bar(); Foo foo=(new Foo()).foo(bar1); System.out.println(foo==foo1); } }