No dejes de compartir nuestra página y códigos con tus amigos, necesitamos tu ayuda para aumentar nuestra comunidad.
Solución:
En primer lugar null
significa la inexistencia de una instancia. Proporcionar una constante predeterminada como DEFAULT
o NONE
, cambiará ese significado. En segundo lugar, ¿por qué necesitaría algo predeterminado para representar lo que parece no existir? Ese es el propósito de null
. Básicamente, tendría que inicializar y almacenar un objeto adicional, que ni siquiera debería existir.
Por cierto, no es una elección de idioma. Depende completamente de usted cómo implementar su enumeración. Puede proporcionar otra constante como DEFAULT
o UNKNOWN
en su enumeración, y evite la asignación de null
a la referencia en su código. Esto se conoce como patrón de objeto nulo. Pero decir que el null
la asignación debería ser un error del compilador, entonces yo diría, ya que un Enum
de todos modos está compilado en un Class
por lo que sería perfectamente válido utilizar null
para representar la inexistencia de una instancia.
Una trampa de permitir null
aunque es con el uso de enum
en switch-case
. El siguiente código arrojará NPE
incluso con un default
caso:
public class Demo
enum Color
WHITE, BLACK;
public static void main(String[] args)
Color color = null;
switch (color) // NPE here
case WHITE: break;
case BLACK: break;
default: break; // null value does not fall into the default
Java no permite un case null:
ya sea, produciendo el siguiente error de compilación:
una etiqueta de caso de cambio de enumeración debe ser el nombre no calificado de una constante de enumeración
Java permite que cualquier referencia sea null, y las referencias a las enumeraciones no son tan especiales como para que se deba crear un caso especial para evitarlo, o para proporcionar otra versión del comportamiento que ya está bien especificado y entendido. Nulo ya es un valor centinela perfectamente adecuado: no necesitamos otro.
Ninguna de sus sugerencias es convincente, ya que ambas requerirían la adición de funciones adicionales para respaldarlas.
En cualquier caso, es varios años demasiado tarde para comenzar a debatir el punto.
Pienso, Enum.DEFAULT
significa que su variable de enumeración contiene un valor, pero null
no. Si es null
se puede interpretar que no tiene valor, no se puede invocar a no-static métodos en él, por ejemplo.
Si te ha resultado de provecho este artículo, nos gustaría que lo compartas con más programadores de esta manera nos ayudas a extender esta información.