Я хочу назвать Af() из Bf(), но оба являются внутренними классами, если я пишу традиционный способ, он не компилируется. Любой простой способ без временной переменной, такой как A _this
в коде?
class MyClass {
[...]
class A {
public void f(){System.out.println("A.f");};
public void g(){System.out.println("A.g");};
}
class B {
public void f(){System.out.println("B.f");};
}
public A a() {
return new A() {
public void g() {
// I want to avoid this step
final A _this = this;
new B() {
public void f() {
System.out.println("foo");
// this works
_this.f();
// but this does not compile
A.this.f();
}
}.f();
}
};
}
[...]
}
Вам необходимо правильно окружить код в скобках, а затем A.this.f()
class A {
public void f() {
System.out.println("A.f");
}
public void g() {
System.out.println("A.g");
}
public A a() {
return new A() {
public void g() {
=
new B() {
public void f() {
System.out.println("foo");
A.this.f();
}
}.f();
}
};
}
public static void main(String[] args) {
new A().a().g();
}
}
class B {
public void f() {
System.out.println("B.f");
}
}
Обновлено: вы можете заменить _this.f();
с new MyClass().new A().f();
но это приведет к созданию нового объекта.
A.this.f();
не будет работать, потому что A
не включает класс. Текущее решение, которое у вас есть `final A _this = this;` - это способ доступа к A во вложенном классе B
Af();
// but this does not compiles
. ОП знает это.