Cuando se calculan las funciones dentro de la variable de una enumeración?

Yassine Badache:

Considere el siguiente código:

public enum MyOwnEnum    {

    JANVIER("janvier", "3101"),
    FEVRIER("février", new DateCalculator().getLeapYear()),
    MARS("mars", "3103"),
    AVRIL("avril", "3004");

    // Two variables, the protected constructor, getters

}

¿Cómo se comportaría el código? Sería el método de calcular directamente en tiempo de compilación y se fija, o sería calcula cada vez que llama a alguien FEVRIERa través de MyOwnEnum.FEVRIERo MyOwnEnum.valueOf("FEVRIER")? O fijo, pero en tiempo de ejecución?

Robby Cornelissen:

Las constantes de enumeración se crean una vez en tiempo de ejecución, o más específicamente, al tiempo de la clase de carga.

Considere el siguiente código:

public enum TestEnum {
    ONE("One at " + System.nanoTime()),
    TWO("Two at " + System.nanoTime());

    String value;

    TestEnum(String value) {
        System.out.println(value);
        this.value = value;
    }
}

public class Test {
    public static void main(String[] args) throws Exception {
        System.out.println("Loading");

        Class.forName("TestEnum"); // Load class

        System.out.println("Evaluating");

        System.out.println(TestEnum.ONE.value); // Evaluate value one
        System.out.println(TestEnum.TWO.value); // Evaluate value two
    }
}

Esto genera el siguiente resultado:

Loading
One at 31207575500045
Two at 31207575625697
Evaluating
One at 31207575500045
Two at 31207575625697

Tenga en cuenta que los valores no cambian en las invocaciones posteriores.

Supongo que te gusta

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