Я хочу называть A.f() из B.f(), но оба являются внутренними классами, если я пишу традиционный способ, он не компилируется. Любой простой способ без временной переменной, такой как 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();
}
};
}
[...]
}
У вас есть концептуальные ошибки в коде. существует несколько способов исправить i. какое решение выбрать, зависит от реального кода реального мира. так как это выглядит как упрощенный пример проблемы реального мира, трудно сказать, как вы должны его исправить. Если это ВАС ваш фактический код, вы бы ставили все методы f и g, а затем вы можете вызвать 'A.f();' – hoijui
@ sol4me' //, но это не компилируется'. ОП знает это. – BackSlash
@BackSlash Код 'public A a() {...}' не окружен никакими скобками, если OP правильно помещает код в фигурные скобки, тогда все компилируется отлично и работает. Я не ссылался на '//, но это не компилирует' – sol4me