Perché una classe interna qualche volta deve specificare esplicitamente l'istanza della classe esterna per chiamare un metodo di classe esterno per il quale non esiste un metodo di matching nella classe interna?
Esempio:
import java.util.Iterator;
public class Outer {
void remove(int index) {}
private class Inner implements Iterator {
@Override
public boolean hasNext() {
return false;
}
@Override
public Object next() {
return null;
}
@Override
public void remove() {
remove(0); // error: remove() in Inner cannot be applied to (int)
Outer.this.remove(0); // ok
}
}
}
Il mio tentativo originale non riuscito in un esempio mostra che questa disambiguazione è non generalmente richiesta:
public class Outer {
private Object field;
void method() {}
private class Inner {
void innerMethod() {
if(field == null) {
method(); // ok
Outer.this.method(); // ok
}
}
}
}