En section 15.12.2.5 of the Java Language Specification, il parle de la façon de choisir la méthode la plus spécifique dans les deux cas de méthodes avec arité fixe et les méthodes de arity variables (à savoir varargs
). Ce que je ne peux pas trouver dans le JLS est quelque chose au sujet de décider entre deux méthodes où un est de l'arité fixe et un de l'arité variable cependant. Par exemple:La méthode la plus spécifique avec des allumettes à la fois arité fixes/variables (varargs)
public interface SomeApi {
public String getSomething(String arg); // method 1
public String getSomething(String ... args); // method 2
}
Compile très bien comme on pouvait s'y attendre (pour les raisons exposées ci-dessous par Yoni). Ce code d'appel compile également:
SomeApi api = ...
Object o = api.getSomething("Hello");
et si vous l'exécutez, method #1
(à savoir la méthode non-varargs) est appelée. Pourquoi ce code d'appel n'est pas ambigu? Pourquoi la méthode de l'arité fixe est-elle plus spécifique que la méthode de l'arité variable? Quelqu'un peut-il me signaler le bit pertinent de la spécification?
curieux ... avez-vous une raison particulière pour comprendre en plus d'un intérêt académique? (J'essaye d'implémenter la sélection d'expédition d'exécution + se demandait qui d'autre pourrait faire la même chose) –