Je le trouve tuff avec enums. Ceci est un exemple du livre de Kathy Siera:Enums constructeur initialiseur statique
public class WeatherTest {
static Weather w;
public static void main(String[] args) {
System.out.print(w.RAINY.count + " " + w.Sunny.count + " ");
}
}
enum Weather {
RAINY, Sunny;
int count = 0;
Weather() {
System.out.print("c ");
count++;
}
}
La sortie est c c 1 1. Compris. Maintenant je pensais que si le champ de compte était statique? Est-ce que la sortie serait c 2 2? Basé sur cela, j'ai modifié la variable de compte à statique. Mais ce que je vois est ceci: Erreur de compilation: Référence illégale au champ statique de l'initialiseur.
Recherche sur le net J'ai trouvé que c'était une sorte de trou de boucle de Sun et il permet des méthodes statiques qui peuvent changer les champs statiques. Ok .. Alors maintenant, j'utilise une INCR méthode statique pour faire mon travail:
class WeatherTest {
static Weather w;
public static void main(String[] args) {
System.out.print(w.RAINY.count + " " + w.Sunny.count + " ");
}
}
enum Weather {
RAINY, Sunny;
Weather() {
System.out.print("c ");
incr();
}
static int count = 0;
static void incr() {
count++;
}
}
À ma grande surprise, je reçois la sortie: c c 0 0! Quelqu'un peut-il m'expliquer ce comportement avant de me tirer dessus?
S'il vous plaît fixer votre indentation et accolades. – ardent
Extrêmement tuff question! Tous les programmeurs Java, Armure vous-même :) – Kameron
ardentsonata: Bien sûr – user1500024