¿Dónde poner los paréntesis para convertir un objeto de forma concisa fundido a un tipo primitivo y sin auto-unboxing?
-
29-09-2019 - |
Pregunta
Con autounboxing, esta declaración automáticamente el trabajo:
int myPrimitive = (Integer) doIt();
Pero si quiero convertir explícitamente desde un Integer
a un int
aquí en una sola línea, ¿dónde tengo que poner los paréntesis?
Solución
O bien el compilador unboxes el entero para usted, o lo hace usted mismo - esto no se puede evitar
.Así que hay que hacer, ya sea
int myPrimitive = ((Integer) doIt()).intValue();
o, más sencillamente, el cambio doIt()
a devuelven un int
ya que parece que quieren tratar con int
s en lugar de Integer
s (nulables).
Otros consejos
Usted puede hacer esto:
int myPrimitive = (int) (Integer) doIt();
Sin embargo, como usted ha dicho, auto-unboxing conseguirá que para usted .
mal ejemplo para mostrar que la cadena pone en el trabajo ( No utilice en el código ):
Map notReallyAMap = (Map) (Object) new String();
La cosa con los moldes de la cadena, es que donde quiera que lo utilice, ya sea el reparto es de fiar, y se puede eliminar intermediarios; o el reparto simplemente causará un ClassCastException
. Así nunca se debe utilizar .