考虑以下代码:
public enum MyOwnEnum {
JANVIER("janvier", "3101"),
FEVRIER("février", new DateCalculator().getLeapYear()),
MARS("mars", "3103"),
AVRIL("avril", "3004");
// Two variables, the protected constructor, getters
}
代码的行为如何?该方法是在编译时直接计算并固定,还是每次有人通过 MyOwnEnum.FEVRIER
或 MyOwnEnum.valueOf("FEVRIER “)
?还是固定的,但在运行时?
最佳答案
枚举常量在运行时创建一次,或者更具体地说,在类加载时创建。
考虑以下代码:
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
}
}
这会生成以下输出:
Loading
One at 31207575500045
Two at 31207575625697
Evaluating
One at 31207575500045
Two at 31207575625697
请注意,这些值不会在后续调用中更改。
关于java - 什么时候计算枚举变量中的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58483092/