ヤシンBadache:
次のコードを考えてみます。
public enum MyOwnEnum {
JANVIER("janvier", "3101"),
FEVRIER("février", new DateCalculator().getLeapYear()),
MARS("mars", "3103"),
AVRIL("avril", "3004");
// Two variables, the protected constructor, getters
}
コードはどのように振る舞うでしょうか?うは、この方法は、コンパイル時に直接計算と固定、またはそれは、誰かがコールするたびに計算されることFEVRIER
を通じてMyOwnEnum.FEVRIER
またはMyOwnEnum.valueOf("FEVRIER")
?あるいは、しかし、実行時に、固定?
ロビーCornelissen:
enum定数は、クラスローディング時に、より具体的に、実行時に、一度作成した、またはされています。
次のコードを考えてみます。
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
値は、後続の呼び出しで変更しないことに注意してください。