Enumeración de Java estática seguridad de los subprocesos método?

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

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=183674&siteId=1
Recomendado
Clasificación