Dove si fa a mettere le parentesi per convertire in modo conciso un oggetto colato a un tipo primitivo, senza auto-unboxing?
-
29-09-2019 - |
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?
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 int
s piuttosto che Integer
s (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 .