Cette question fait suite à: Why can’t I call a method outside of an anonymous class of the same nameEst-ce que javac devrait trouver des méthodes en dehors d'une classe anonyme du même nom?
Cette réponse précédente question pourquoi, mais maintenant je veux savoir si javac devrait trouver run (bar int)? (Voir la question précédente pour voir pourquoi run (42) échoue)
Si ce n'est pas le cas, est-ce dû à une spécification? Produit-t-il un code ambigu? Mon point est, je pense que c'est un bug. Alors que la question précédente expliquait pourquoi ce code ne compilait pas, je pense qu'il devrait compiler si javac cherchait plus haut dans l'arbre s'il n'arrivait pas à trouver une correspondance au niveau actuel. C'EST À DIRE. Si this.run() ne correspond pas, il doit vérifier automatiquement NotApplicable.this pour une méthode d'exécution.
Notez également que foo (int bar) est correctement trouvé. Si vous donnez une raison pour laquelle run (int bar) ne devrait pas être trouvé, cela doit aussi expliquer pourquoi foo (int bar) est trouvé.
public class NotApplicable {
public NotApplicable() {
new Runnable() {
public void run() {
// this works just fine, it automatically used NotApplicable.this when it couldn't find this.foo
foo(42);
// this fails to compile, javac find this.run(), and it does not match
run(42);
// to force javac to find run(int bar) you must use the following
//NotApplicable.this.run(42);
}
};
}
private void run(int bar) {
}
public void foo(int bar) {
}
}
Merci, je pense que je comprends la spécification. Maintenant, je peux faire valoir que c'est une mauvaise spécification et devrait être changé. Compile Time L'étape 1 doit inclure la classe englobante de la classe anonyme. – Pyrolistical