Aruna Karunarathna:
Tengo un caso de uso donde, la iteración de la enumeración de Java y la prueba, el argumento contiene en la lista de enumeración, es un método estático, ¿Esto es seguro hilo?
public enum EnumType {
ONE,
TWO,
THREE,
FOUR,
FIVE;
public static boolean isValid(String input) {
for (EnumType type : EnumType.values()) {
if (input.equals(type.toString())) {
return true;
}
}
return false;
}
}
Lino:
EnumType.values()
Devuelve una copia de todas las constantes de enumeración, por lo que incluso si desea modificar la matriz devuelta por values()
no influiría en otros hilos.
El código de bytes confirma:
public static values()[Lcom/example/EnumType;
L0
LINENUMBER 43 L0
GETSTATIC com/example/EnumType.$VALUES : [Lcom/example/EnumType;
INVOKEVIRTUAL [Lcom/example/EnumType;.clone ()Ljava/lang/Object;
CHECKCAST [Lcom/example/EnumType;
ARETURN
MAXSTACK = 1
MAXLOCALS = 0
La línea:
INVOKEVIRTUAL [Lcom/example/EnumType;.clone ()Ljava/lang/Object;
Invoca el Array.clone()
método, que devuelve una copia superficial de la matriz