Dove si fa a mettere le parentesi per convertire in modo conciso un oggetto colato a un tipo primitivo, senza auto-unboxing?

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

Domanda

Con autounboxing, questa dichiarazione sarà automaticamente il lavoro:

int myPrimitive = (Integer) doIt();

Ma se voglio convertire in modo esplicito da un Integer a un int qui in una sola riga, dove devo mettere le parentesi?

È stato utile?

Soluzione

Sia il compilatore unboxes l'Integer per voi, o lo fai da te - questo non può essere evitato

.

Quindi è necessario fare uno

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

o più semplicemente, il cambiamento doIt() per restituire un int dal momento che sembra di avere a che fare con ints piuttosto che Integers (null-grado).

Altri suggerimenti

Si potrebbe fare questo:

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

Ma come hai detto, auto-unboxing otterrà che per voi .

Un male esempio per dimostrare che la catena getta lavoro ( Non utilizzare mai questo codice ):

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

La cosa con calchi a catena, è che ovunque lo si utilizza, sia il cast è legittimo, ed è possibile rimuovere gli intermediari; o il cast semplicemente causare un ClassCastException. Così non si dovrebbe mai usare .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top