In section 15.12.2.5 of the Java Language Specification, spricht er darüber, wie die spezifischste Verfahren in beiden Fällen von Methoden mit festen arity und Methoden der variablen arity zu wählen (das heißt varargs
).Die meisten spezifischen Verfahren mit Streichhölzern sowohl fix/variabel arity (varargs)
Was ich in der JLS nicht finden kann, ist etwas über die Entscheidung zwischen zwei Methoden, wobei eine feste und eine variable ist. Zum Beispiel:
public interface SomeApi {
public String getSomething(String arg); // method 1
public String getSomething(String ... args); // method 2
}
Compiliert ganz gut wie man erwarten würde (für von Yoni genannten Gründen unter). Diese Berufung Code kompiliert auch:
SomeApi api = ...
Object o = api.getSomething("Hello");
und wenn Sie es laufen, method #1
(das heißt die Nicht-varargs Methode) aufgerufen. Warum ist dieser Anrufcode nicht mehrdeutig? Warum ist die Fixed-Arity-Methode spezifischer als die Variable-Arity-Methode? Kann mich jemand auf das relevante Teil der Spezifikation hinweisen?
nur neugierig ... haben Sie haben einen bestimmten Grund für das Verständnis neben einem akademischen Interesse? (Ich versuche, Laufzeit-Dispatch-Auswahl zu implementieren + fragte sich, wer sonst könnte das gleiche tun) –