Où voulez-vous mettre les parenthèses pour convertir de façon concise un objet casté en un type primitif sans-unboxing automatique?

StackOverflow https://stackoverflow.com/questions/3909698

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?

Était-ce utile?

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 ints plutôt que (null) en mesure Integers.

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 .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top