Java 如何在非静态内部类的另一个实例中引用外部类?
我正在使用ApacheCommonsEqualsBuilder为非静态Java内部类构建equals方法。例如:Java 如何在非静态内部类的另一个实例中引用外部类?,java,syntax,reference,inner-classes,Java,Syntax,Reference,Inner Classes,我正在使用ApacheCommonsEqualsBuilder为非静态Java内部类构建equals方法。例如: import org.apache.commons.lang.builder.EqualsBuilder; public class Foo { public class Bar { private Bar() {} public Foo getMyFoo() { return Foo.this }
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
}
}
除了声明getMyFoo()
方法外,是否还有语法可以用来引用other
的Foo
引用?类似于other.Foo.this
(它不工作)?否
最好的方法可能是您建议的:向内部类添加getFoo()方法。不,没有getter是不可能的。“this”关键字将始终指向当前实例。我很好奇你为什么要这么做。。。看来你写作文的方式不对
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);
}
}
由于使用了Foo.this,因此将内部类(Foo-myFoo=new-Foo();myFoo.new-Bar();的创建限制在一个实例中,因此我认为这更干净。是:
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);
}
}
这并不能回答问题。事实上,这正是他试图避免的。假设Bar的构造函数是私有的,实例是由Foo上定义的工厂方法创建的;此外,Bar的每个实例都应该绑定到Foo的一个实例。使用静态内部类可以做到这一点,但语言功能的全部要点是re是为了简化这种用法。哦,两个类都需要能够引用彼此的私有成员。在我的特殊情况下,Bar是抽象的,工厂方法返回匿名类的对象,这些匿名类扩展了Bar,实现了在Bar中定义为抽象的公共方法;实现接近传递给t的参数的范围当然,在不重写hashcode的情况下重写equals会破坏对象的契约;Bar需要有公共int hashcode(){return foo.hashcode();}