[Generics/Tableaux] Problèmes de succession
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:
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:
1 2 3
| String[] str = new String[1];
Object[] obj = str;
obj[0] = 5; |
ou même directement
Code:
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...