Wo setzen Sie die Klammern um knapp ein gegossene Objekt in einen primitiven Typ ohne Auto-Unboxing-Format konvertieren?
-
29-09-2019 - |
Frage
Mit autounboxing, diese Aussage wird automatisch Arbeit:
int myPrimitive = (Integer) doIt();
Aber wenn ich will von einem Integer
zu einem int
hier in einer einzigen Zeile explizit konvertieren, wo muß ich die Klammern setzen?
Lösung
Entweder der Compiler unboxes die Integer für Sie, oder Sie es selbst tun - dies nicht vermieden werden kann
.Also Sie müssen entweder tun
int myPrimitive = ((Integer) doIt()).intValue();
oder einfacher Wechsel doIt()
eine int
zurückzukehren, da Sie scheinen mit int
s umgehen zu wollen, anstatt (null-fähig) Integer
s.
Andere Tipps
Sie können dies tun:
int myPrimitive = (int) (Integer) doIt();
Aber wie Sie gesagt haben, Auto-Unboxing wird, dass für Sie zum .
schlecht Beispiel, dass die Kette zu zeigen, wirft Arbeit ( Sie jemals nicht diesen Code verwenden ):
Map notReallyAMap = (Map) (Object) new String();
Die Sache mit Kette Abgüsse, ist, dass überall dort, wo Sie es verwenden, entweder die Besetzung echt ist, und Sie können Vermittler entfernen; oder die Besetzung einfach ein ClassCastException
verursachen. So Sie sollten nie verwenden .