L'accès aux champs statiques en enum constructeur est interdit par le compilateur. Le code source ci-dessous fonctionne, il utilise un champ statique:
public enum TrickyEnum
{
TrickyEnum1, TrickyEnum2;
static int count;
TrickyEnum()
{
incrementCount();
}
private static void incrementCount()
{
count++;
}
public static void main(String... args)
{
System.out.println("Count: " + count);
}
}
Sortie:
Count: 2.
Mais le code ci-dessous ne fonctionne pas malgré il y a très peu de différence:
public enum TrickyEnum
{
TrickyEnum1, TrickyEnum2;
static int count;
TrickyEnum()
{
count++; //compiler error
}
public static void main(String... args)
{
System.out.println("Count: " + count);
}
}
De ma recherche, généralement les gens prétendent que le problème est dû à l'ordre dans lequel les champs statiques sont initialisés. Mais d'abord, exemple fonctionne, alors pourquoi ne développeurs Java interdire le deuxième exemple? Il convient également de travailler.