Salut j'ai noté une différence dans l'auto unboxing de comportement entre Java SE 6 et Java SE 7. Je me demande pourquoi, parce que je ne trouve pas de documentation des changements dans ce comportement entre ces deux versions.
Voici un exemple simple:
Object[] objs = new Object[2];
objs[0] = new Integer(5);
int myInt = (int)objs[0];
Cette compile bien avec javac de Java SE 7. Cependant, si je donne le compilateur de la "source de 1,6 argument de" j'obtiens une erreur sur la dernière ligne:
inconvertible types
found : java.lang.Object
required: int
J'ai essayé de télécharger la version Java SE 6 pour compiler avec la version native 6 compilateur (sans aucune source d'option). Il accepte et donne la même erreur que ci-dessus.
Donc, ce qui donne? D'un peu plus de l'expérimentation, il semble que l'unboxing de la version 6 de Java ne peut unbox valeurs clairement (au moment de la compilation) est de la boite type. Par exemple, cela fonctionne dans les deux versions:
Integer[] objs = new Integer[2];
objs[0] = new Integer(5);
int myInt = (int)objs[0];
Il semble donc que, entre Java 6 et 7, l'unboxing de la fonctionnalité a été améliorée de sorte qu'il pourrait lancer et unbox types d'objets en un seul coup, sans le savoir (au moment de la compilation) que la valeur est de la bonne boxed de type. Cependant, la lecture à travers le Langage Java Spécification ou des billets de blog qui ont été écrits à l'époque de Java 7 est sorti, je ne vois aucun changement de cette chose, alors je me demandais ce que le changement est et ce que cette "fonctionnalité" est appelé?
Juste une curiosité: en Raison de la modification, il est possible de déclencher des "mauvais" unboxings:
Object[] objs = new Float[2];
objs[0] = new Float(5);
int myInt = (int)objs[0];
Cette compile bien, mais donne une ClassCastException au moment de l'exécution.
J'espère que quelqu'un peut m'aider avec une référence à la présente. Je vous remercie à l'avance.