Wo setzen Sie die Klammern um knapp ein gegossene Objekt in einen primitiven Typ ohne Auto-Unboxing-Format konvertieren?

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

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?

War es hilfreich?

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 ints umgehen zu wollen, anstatt (null-fähig) Integers.

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 .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top