Où voulez-vous mettre les parenthèses pour convertir de façon concise un objet casté en un type primitif sans-unboxing automatique?
-
29-09-2019 - |
Question
Avec autounboxing, cette déclaration sera automatiquement travail:
int myPrimitive = (Integer) doIt();
Mais si je veux convertir explicitement d'un Integer
à un int
ici dans une seule ligne, où dois-je mettre les parenthèses?
La solution
Soit le compilateur unboxes l'entier pour vous, ou vous le faites vous-même - cela ne peut pas être évité
.Vous devez soit faire
int myPrimitive = ((Integer) doIt()).intValue();
ou plus simplement, le changement doIt()
pour revenir un int
puisque vous semblez vouloir traiter int
s plutôt que (null) en mesure Integer
s.
Autres conseils
Vous pouvez faire ceci:
int myPrimitive = (int) (Integer) doIt();
Mais comme vous l'avez dit, auto-unboxing obtiendra pour vous .
mauvais par exemple pour montrer que la chaîne jette travail ( ne jamais utiliser ce code ):
Map notReallyAMap = (Map) (Object) new String();
La chose avec des moulages de la chaîne, est que partout où vous l'utilisez, soit la distribution est légitime, et vous pouvez supprimer les intermédiaires; ou la distribution simplement provoquer une ClassCastException
. Donc, vous ne devriez jamais utiliser .