Los siguientes programas grabados, respectivamente, 'falso' y 'verdadero':no deseado magia autoboxing en Números
Number n = true ? new Long(1) : new Double(2.0);
System.out.println(n instanceof Long);
System.out.println(n instanceof Double);
lo tanto, no pasará mucho más que un doble. Sin embargo, funciona según lo previsto en las clases normales: Tener
class B {}
class D1 extends B {}
class D2 extends B {}
esto imprimirá 'verdadero':
B b = true ? new D1() : new D2();
System.out.println(b instanceof D1);
lo que significa que no está funcionando de la misma como el ejemplo anterior.
Estoy seguro de que hay algo relacionado con el autoboxing, pero ¿realmente es así como debería funcionar? ¿Por qué usa el boxeo cuando la clase numérica es una superclase tanto de largo como de doble, por lo que esa expresión podría evaluarse en Número?
Es realmente un dolor, porque al imprimir el n, se imprime como un valor doble. (Sé que es fácil de solucionar este problema, pero me volvió loca)
El ':?' Toma el tipo de de la última expresión Si lo hiciste 'nulo' sería un' Largo': P. –
No, no toma el tipo de la última expresión, solo mira el segundo ejemplo. Por supuesto, el código es solo un ejemplo, pero imagina que hay algo de información booleana real donde ahora lo 'verdadero' se encuentra en el tren. – poroszd
¿Por qué los votos cercanos? Esto parece una muy buena pregunta para mí. –