metodo più specifico con partite di entrambe arietà fisso / variabile (varargs)
-
19-09-2019 - |
Domanda
15.12.2.5 del linguaggio Java specifiche , si parla di come scegliere il metodo più preciso in entrambi i casi di metodi con arietà fisso e metodi di arietà variabili (ad esempio varargs
).
Quello che non riesco a trovare nella JLS è nulla di decidere tra due metodi in cui è uno dei arità fisso e uno dei arità variabile comunque. Ad esempio:
public interface SomeApi {
public String getSomething(String arg); // method 1
public String getSomething(String ... args); // method 2
}
compila bene come ci si aspetterebbe ( per motivi delineati da Yoni seguente ). Questo codice chiamante compila anche:
SomeApi api = ...
Object o = api.getSomething("Hello");
e se lo si esegue, method #1
(vale a dire il metodo non varargs) è chiamato. Perché questa chiamata-codice non ambiguo? Perché è il metodo arity fisso più specifico rispetto alla variabile-arity uno? Qualcuno mi può indicare il bit corrispondente della specifica?
Soluzione
La prima fase di risoluzione metodo considera metodi arity solo fissi e il processo termina se viene trovata una corrispondenza, prima di qualsiasi metodo varargs sono considerati.
http: // docs. oracle.com/javase/specs/jls/se6/html/expressions.html#15.12.2.2
15.12.2.2 Fase 1: Identificare paritarie Arity metodi applicabili per Sottotipizzazione
Se nessun metodo applicabile per sottotipo è trovato, la ricerca di applicabile Metodi continua con la fase 2 (§15.12.2.3). In caso contrario, il più metodo specifico (§15.12.2.5) è scelto tra i metodi applicabili da subtyping.
(Il corsivo è mio).
Altri suggerimenti
Non si può puntare alle specifiche, ma logicamente,
getSomething(String...args)
si traduce in
getSomething(String[] args)
senza ambiguità