Le code à la fin produit une erreur de compilation:Pourquoi ne puis-je appeler une méthode en dehors d'une classe anonyme du même nom
NotApplicable.java:7: run() in cannot be applied to (int)
run(42);
^
1 error
La question est pourquoi? Pourquoi javac pense que j'appelle run(), et ne trouve pas run (int bar)? Il a correctement appelé foo (int bar). Pourquoi dois-je utiliser NotApplicable.this.run (42) ;? Est-ce un bug?
public class NotApplicable {
public NotApplicable() {
new Runnable() {
public void run() {
foo(42);
run(42);
// uncomment below to fix
//NotApplicable.this.run(42);
}
};
}
private void run(int bar) {
}
public void foo(int bar) {
}
}
Vous n'expliquez pas pourquoi foo (int bar) est correctement appelé. – Pyrolistical
Cette réponse est correcte, à l'exception de la partie sur "Ce comportement serait exposé même si les deux méthodes n'étaient pas nommées 'run'". Le compilateur recherchera l'arbre d'imbrication pour la première méthode qui correspond au nom de la méthode. – DJClayworth