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?

È stato utile?

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à

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top