Где вы помещаете скобки, чтобы кратко преобразовать приведенный объект в примитивный тип без автоматической распаковки? - PullRequest
0 голосов
/ 12 октября 2010

При автоматическом подключении этот оператор будет работать автоматически:

int myPrimitive = (Integer) doIt();

Но если я хочу явно преобразовать Integer в int здесь, в одной строке, где я должен поставить скобки?

Ответы [ 2 ]

4 голосов
/ 12 октября 2010

Вы можете сделать это:

int myPrimitive = (int) (Integer) doIt();

Но, как вы сказали, автоматическая распаковка получит это для вас .

A плохо пример, показывающий, что цепные заклинания работают ( никогда не используйте этот код ):

Map notReallyAMap = (Map) (Object) new String();

Что касается цепных приведений, то, где бы вы их ни использовали, либозаконно, и вы можете удалить посредников;или приведение просто вызовет ClassCastException.Так что вы никогда не должны его использовать .

2 голосов
/ 12 октября 2010

Либо компилятор распаковывает Integer для вас, либо вы делаете это самостоятельно - этого нельзя избежать.

Так что вам нужно либо сделать

int myPrimitive = ((Integer) doIt()).intValue();

или, проще, измените doIt(), чтобы получить int, так как вы, похоже, хотите иметь дело с int с, а не с (нулевым) Integer с.

...