Java enum default value

Enumeración Java

Sin embargo, no necesito más valores que los que ya están en los valores de la enumeración. Así que quiero establecer el campo del objeto como valor por defecto si el valor del json no coincide con ninguno de los valores del enum.

com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `com.xxx.xxx.xxx.Animal` from String “DOLPHIN”: not one of the values accepted for Enum class: [ÁGUILA, PERRO, GATO, DESCONOCIDO]

Todos esos tres fallaron para resolver la excepción. No tengo ni idea de qué es exactamente lo que hace esta excepción así que probaré otras formas de depurar, pero con la esperanza de que alguien pueda darme una pista dejo este comentario.

Lo segundo es que sería bueno intentar aislar el código fuera de Spring Boot para ver si funciona: muchas veces el problema es que el ObjectMapper no se está configurando como esperas (o mejor dicho, configurando la instancia que no usa SB).

Enumeración parametrizada de Java

Sí, tienes razón en que a.DOG.sound se convertiría en Animals.DOG.sound pero no porque a se declare estática. Es porque las variables enum son todas estáticas. Básicamente un enum se traduce en una clase Java normal que extiende java.lang.Enum. Así que tu enum después de la compilación se convertiría en algo como esto

  ¿Qué es un ORM?

Y como debes saber, si accedemos a cualquier miembro estático de una clase usando una variable de referencia de la clase (en tu caso es a), entonces el compilador reemplaza el nombre de la variable de referencia con el nombre de la clase (en tu caso a sería reemplazado por Animala)…

Java enum int value

Una enumeración sin un System.FlagsAttribute aplicado no define un miembro con valor cero. O bien, una enumeración que tiene un FlagsAttribute aplicado define un miembro que tiene un valor de cero pero su nombre no es ‘None’. O bien, la enumeración define varios miembros con valor cero.

El valor por defecto de una enumeración no inicializada, al igual que otros tipos de valores, es cero. Una enumeración no atribuida a banderas debe definir un miembro con valor cero para que el valor por defecto sea un valor válido de la enumeración. Si es apropiado, nombre el miembro “Ninguno” (o uno de los nombres adicionales permitidos). En caso contrario, asigne el valor cero al miembro más utilizado. Por defecto, si el valor del primer miembro de la enumeración no se establece en la declaración, su valor es cero.

  Metodos estaticos java

Si una enumeración a la que se ha aplicado el atributo FlagsAttribute define un miembro de valor cero, su nombre debe ser “None” (o uno de los nombres adicionales permitidos) para indicar que no se han establecido valores en la enumeración. El uso de un miembro de valor cero para cualquier otro propósito es contrario al uso del FlagsAttribute en el sentido de que los operadores AND y OR bitwise son inútiles con el miembro. Esto implica que sólo se debe asignar el valor cero a un miembro. Si en una enumeración con atributo Flags aparecen varios miembros con valor cero, Enum.ToString() devuelve resultados incorrectos para los miembros que no son cero.

Constructor Java enum

Cuando se declara un objeto con un campo/propiedad Enum se inicializará al Enum con el valor 0 sin importar si ese valor existe en el Enum o no. Esto no ocurre en Java, por lo que el valor se deja nulo lo que cambia el comportamiento del código.

  Ejemplo if php

Mi preocupación es que esta es una característica del lenguaje que se está traduciendo para los Enums que se comportan como BitMask, los conviertes en int, por lo que obtienen el valor cero por defecto si no se inicializan. Pero este comportamiento no se traslada a los Enums normales.

Creo que vale la pena discutir si debemos cambiar el valor por defecto para que no sea un enum de Java para C#. Mi único problema entonces es, cómo expresar mejor los enums de Java en C# (en los casos en que los necesites).

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad