Suite à l'article de Romain Guy sur les problèmes de succession au niveau des Generics en java, Java 5.0 interdit tout simplement de faire ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
List<Double> nombres = new ArrayList<Double>();
List<Object> objets = nombres;
Et les explications données sont un bon argument...

Cependant, je me pose une question... On rencontre exactement le même problème avec les tableaux qu'avec les types paramétrés... Pourtant, il est possible de faire:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
String[] str = new String[1];
Object[] obj = str;
obj[0] = 5;
ou même directement
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
Object[] obj = new String[1];
obj[0] = 5;
Cela compile très bien.

Par contre, à l'exécution, la dernière ligne lève une java.lang.ArrayStoreException.

Pourquoi donc n'avoir pas utilisé le même comportement pour les tableaux que pour les generics? Soit interdire dans les 2 cas, soit autoriser dans les 2 cas...

EDIT: Dans le même genre, pourquoi l'auto-(un)boxing autorise Integer <-> int mais pas Integer[] <-> int[] ?

Merci de votre réponse...