Presi il codice this link e modificate alcune parti di esso:
public static void main(String[] args) {
Byte i = 5;
byte k = 5;
aMethod(i, k);
}
//method 1
static void aMethod(byte i, Byte k) {
System.out.println("Inside 1");
}
//method 2
static void aMethod(byte i, int k) {
System.out.println("Inside 2");
}
//method 3
static void aMethod(Byte i, Byte k) {
System.out.println("Inside 3 ");
}
//method 4
static void aMethod(Byte i, Byte ... k) {
System.out.println("Inside 4 ");
}
Il compilatore dà errore (Il metodo è ambiguo per il tipo sovraccarico) per metodi 1, 2 e 3, ma non 4 (perché ?)
La risposta sta nel meccanismo utilizzato da java per associare le chiamate di metodo alle firme dei metodi. Il meccanismo avviene in tre fasi, in ciascuna fase se esso trova metodo di corrispondenza all'arresto:
+ prima fase: uso ampliamento a trovare Metodo corrispondenza (nessun metodo corrispondente trovate)
+ fase due: (anche) utilizzare boxing/unboxing per trovare corrispondenza metodo (metodo di 1,2 e 3 partite)
+ fase tre: (anche) utilizzare args var (! metodo 4 partite)
fonte
2017-01-16 20:35:31
soluzione - aggiungere un '(char) metodo' – ZhongYu
[La prima regola di programmazione: è sempre colpa tua] (https://blog.codinghorror.com/the-first-rule-of-programming-its-always-your-fault/) – gronostaj
Scelta di design interessante che hanno fatto lì. In C# credo che l'equivoco di "..." sia param. C# avrebbe scelto il carattere, un comportamento che ritengo più sensato, ma naturalmente è una lingua diversa. –