AdrianKhisbe
¿Existe una forma integrada de obtener la cantidad de elementos de un Enum con algo como Myenum.length
,
¿O tengo que implementarme una función? int size()
grabar el número de elemento?
cazador mcmillen
Sí, puedes usar el Enum.values()
método para obtener una matriz de valores de Enum y luego use el length
propiedad.
public class Main {
enum WORKDAYS { Monday, Tuesday, Wednesday, Thursday, Friday; }
public static void main(String[] args) {
System.out.println(WORKDAYS.values().length);
// prints 5
}
}
-
Enum.values()
asigna una nueva matriz cada vez, por lo que no se recomienda para una alta tasa de llamadas (es decir, condición de bucle for). Almacene en caché el valor si necesita llamarlo con mucha frecuencia.– Marcos Jerónimo
21 de octubre de 2019 a las 13:46
-
@MarkJeronimus Incluso sin llamarlo a menudo, sigue siendo una mala práctica. Asignar una matriz solo para la propiedad de longitud es una tontería, incluso si solo se hace una vez.
– Demonio del odio
4 de febrero de 2021 a las 8:35
-
@Hatefiend, entonces, ¿qué sugieres?
– Bouh
5 mayo 2021 a las 23:42
Raúl Bobhate
Puedes obtener la longitud usando Myenum.values().length
El Enum.values()
devuelve una matriz de todos los enum
constantes Puedes usar el length
variable de esta matriz para obtener el número de enum
constantes
Suponiendo que tiene la siguiente enumeración:
public enum Color
{
BLACK,WHITE,BLUE,GREEN,RED
}
La siguiente declaración asignará 5 a size
:
int size = Color.values().length;
-
length
no es un método de una matriz, es un campo de propiedad, por lo que lo usaría sin paréntesis.– Cyrille Ka
5 de julio de 2013 a las 15:18
-
@CyrilleKa: Gracias por avisar. corregido 🙂
– Raúl Bobhate
5 de julio de 2013 a las 15:22
Yevhen Tkachenko
Para evitar llamar valores() método cada vez:
public class EnumTest {
enum WORKDAYS {
Monday,
Tuesday,
Wednesday,
Thursday,
Friday;
public static final int size;
static {
size = values().length;
}
}
public static void main(String[] args) {
System.out.println(WORKDAYS.size); // 5
}
}
jaamit
El compilador de Java agrega el método enum.values() y no se menciona en las API.
¿Dónde está la documentación para el método de valores () de Enum?
MyEnum.values()
devuelve las constantes de enumeración como una matriz.
Entonces puedes usar:
int size = MyEnum.values().length
Busqué una respuesta de Kotlin y apareció esta pregunta. Entonces, aquí está mi respuesta.
enum class MyEnum { RED, GREEN, BLUE }
MyEnum.values().size // 3
Esta es otra forma de hacerlo:
inline fun <reified T : Enum<T>> sizeOf() = enumValues<T>().size
sizeOf<MyEnum>() // 3
Gracias a Miha_x64 por esta respuesta.
nada
En respuesta a la respuesta de Yevhen Tkachenko, se puede optimizar aún más cuando se usa la matriz de valores de enumeración, por lo que el compilador llama values()
solo una vez:
public class EnumTest {
enum WORKDAYS {
Monday,
Tuesday,
Wednesday,
Thursday,
Friday;
public static final WORKDAYS[] values = WORKDAYS.values();
}
public static void main(String[] args) {
System.out.println(WORKDAYS.values.length); // 5
for (int i = 0; i < WORKDAYS.values.length; i++)
System.out.println(WORKDAYS.values[i].name());
}
}
¿Estás hablando de enumeraciones o una Enumeración? Estos no son lo mismo.
– Cyrille Ka
5 de julio de 2013 a las 15:14
Estaba hablando de enumeraciones. El problema es que en las enumeraciones francesas es una abreviatura de “enumeración” (como en inglés, tiendo a pensar). así que no estaba hablando de la interfaz.
– AdrianKhisbe
5 de julio de 2013 a las 15:27
¿Está bien que agregué la etiqueta Kotlin? Busqué en Google una solución de Kotlin y terminé aquí.
– Mahozad
27 de septiembre de 2021 a las 8:19
Consulte esta publicación relacionada.
– Mahozad
27 de septiembre de 2021 a las 8:23
Ver también este problema de seguimiento que propone un reemplazo eficaz para
Enum.values()
en Kotiln.– Mahozad
6 de noviembre de 2021 a las 12:10