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 java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24public 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 :
Mais, si je change mon short par son wrapper,"short, int"
"int, int"
"Short, Integer"
"Number x, Number y"
"short, int..."
"int..."
j'obtiens l'ordre suivant :
Code java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5public static void main(String[] args){ Short sh = 7; test(sh,6); }
Soudainement, les varargs sont devenues prioritaires !"short, int..."
"int..."
etc.
"short, int "
"int, int"
Quelqu'un aurait-il une explication du pourquoi l'unboxing n'a pas été préféré au varargs ?
Merci bien.








Répondre avec citation
Partager