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:
Et les explications données sont un bon argument...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 List<Double> nombres = new ArrayList<Double>(); List<Object> objets = nombres;
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:
ou même directement
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 String[] str = new String[1]; Object[] obj = str; obj[0] = 5;
Cela compile très bien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Object[] obj = new String[1]; obj[0] = 5;
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...
Partager