Saltar al contenido

¿Por qué Java permite null valor que se asignará a un Enum?

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 DEFAULTo 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 Classpor 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á NPEincluso 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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *