Java Language Enum corps spécifique constant


Exemple

Dans un enum il est possible de définir un comportement spécifique pour une constante particulière de l' enum qui remplace le comportement par défaut de l' enum . Cette technique est appelée corps spécifique constant .

Supposons que trois élèves de piano - John, Ben et Luke - soient définis dans une enum appelée PianoClass , comme suit:

    enum PianoClass {
    JOHN, BEN, LUKE;
        public String getSex() {
            return "Male";
        }
        public String getLevel() {
            return "Beginner";
        }
    }

Et un jour, deux autres étudiants arrivent - Rita et Tom - avec un sexe (féminin) et un niveau (intermédiaire) qui ne correspondent pas aux précédents:

    enum PianoClass2 {
    JOHN, BEN, LUKE, RITA, TOM;
        public String getSex() {
            return "Male"; // issue, Rita is a female
        }
        public String getLevel() {
            return "Beginner"; // issue, Tom is an intermediate student
        }
    }

de sorte que le simple ajout des nouveaux étudiants à la déclaration constante, comme suit, n'est pas correct:

PianoClass2 tom = PianoClass2.TOM;
PianoClass2 rita = PianoClass2.RITA;
System.out.println(tom.getLevel()); // prints Beginner -> wrong Tom's not a beginner
System.out.println(rita.getSex()); // prints Male -> wrong Rita's not a male

Il est possible de définir un comportement spécifique pour chaque constante, Rita et Tom, qui remplace le comportement par défaut de PianoClass2 comme suit:

enum PianoClass3 {
    JOHN, BEN, LUKE,
    RITA {
        @Override
        public String getSex() {
            return "Female";
        }
    },
    TOM {
        @Override
        public String getLevel() {
            return "Intermediate";
        }
    };
    public String getSex() {
        return "Male";
    }
    public String getLevel() {
        return "Beginner";
    }
}

et maintenant le niveau de Tom et le sexe de Rita sont comme ils devraient être:

PianoClass3 tom = PianoClass3.TOM;
PianoClass3 rita = PianoClass3.RITA;
System.out.println(tom.getLevel()); // prints Intermediate
System.out.println(rita.getSex()); // prints Female

Une autre façon de définir un corps spécifique au contenu consiste à utiliser un constructeur, par exemple:

enum Friend {
    MAT("Male"),
    JOHN("Male"),
    JANE("Female");
    
    private String gender;

    Friend(String gender) {
        this.gender = gender;
    }

    public String getGender() {
        return this.gender;
    }
}

et utilisation:

Friend mat = Friend.MAT;
Friend john = Friend.JOHN;
Friend jane = Friend.JANE;
System.out.println(mat.getGender());     // Male
System.out.println(john.getGender());    // Male
System.out.println(jane.getGender());    // Female