Question priorité varargs et boxing
Bonjour à tous !
J'ai une question concernant les priorités entre varargs et les wrappers lorsqu'on appelle une certaine méthode.
Selon ce que je sais, la priorité est donnée aux éléments selon leur introduction dans le langage.
Donc, widening, boxing et puis seulement après les varargs.
Cependant, voici un exemple qui n'y répond pas et je ne me l'explique pas.
Voici tout d'abord un comportement standard :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
public static void main(String[] args){
short sh = 7;
test(sh,6);
}
static void test(int x, int y){
System.out.println("int, int");
}
static void test(short x, int y){
System.out.println("short, int");
}
static void test(Short x, Integer y){
System.out.println("Short, Integer");
}
static void test(Number x, Number y){
System.out.println("Number, Number");
}
static void test(int... x){
System.out.println("int...");
}
static void test(short y,int... x){
System.out.println("short, int...");
} |
Dans ce cas, j'ai les priorités suivantes :
Citation:
"short, int"
"int, int"
"Short, Integer"
"Number x, Number y"
"short, int..."
"int..."
Mais, si je change mon short par son wrapper,
Code:
1 2 3 4 5
|
public static void main(String[] args){
Short sh = 7;
test(sh,6);
} |
j'obtiens l'ordre suivant :
Citation:
"short, int..."
"int..."
etc.
"short, int "
"int, int"
Soudainement, les varargs sont devenues prioritaires !
Quelqu'un aurait-il une explication du pourquoi l'unboxing n'a pas été préféré au varargs ?
Merci bien.