如何在非静态内部类的另一个实例中引用外部类?

2022-09-04 04:21:05

我正在使用Apache Commons EqualsBuilder为非静态Java内部类构建equals方法。例如:

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

除了声明方法之外,是否有语法可以引用 的引用?类似的东西(这不起作用)?otherFoogetMyFoo()other.Foo.this


答案 1

哈哈

最好的方法可能是你建议的:在你的内部类中添加一个getFoo()方法。


答案 2

不,没有一个获取器是不可能的。“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.这限制了内部类的创建(Foo myFoo = new Foo(); myFoo.new Bar();对于一个实例,我会说这要干净得多。