Java Language Enum Polymorphism Pattern


Exemple

Lorsqu'une méthode doit accepter un ensemble "extensible" de valeurs d' enum , le programmeur peut appliquer un polymorphisme comme sur une class normale en créant une interface qui sera utilisée n'importe où où l' enum sera utilisée:

public interface ExtensibleEnum {
    String name();
}

De cette façon, toute enum étiquetée par (implémentant) l'interface peut être utilisée comme paramètre, permettant au programmeur de créer une quantité variable d' enum qui sera acceptée par la méthode. Cela peut être utile, par exemple, dans les API où il existe une enum par défaut (non modifiable) et où l'utilisateur de ces API souhaite "étendre" l' enum avec plus de valeurs.

Un ensemble de valeurs enum par défaut peut être défini comme suit:

public enum DefaultValues implements ExtensibleEnum {
    VALUE_ONE, VALUE_TWO;
}

Des valeurs supplémentaires peuvent alors être définies comme ceci:

public enum ExtendedValues implements ExtensibleEnum {
    VALUE_THREE, VALUE_FOUR;
}

Exemple qui montre comment utiliser les énumérations - notez comment printEnum() accepte les valeurs des deux types enum :

private void printEnum(ExtensibleEnum val) {
    System.out.println(val.name());
}  

printEnum(DefaultValues.VALUE_ONE);    // VALUE_ONE
printEnum(DefaultValues.VALUE_TWO);    // VALUE_TWO
printEnum(ExtendedValues.VALUE_THREE); // VALUE_THREE
printEnum(ExtendedValues.VALUE_FOUR);  // VALUE_FOUR

Remarque: Ce modèle ne vous empêche pas de redéfinir les valeurs enum, qui sont déjà définies dans une enum, dans une autre énumération. Ces valeurs enum seraient alors des instances différentes. De plus, il n'est pas possible d'utiliser switch-on-enum car nous n'avons que l'interface, pas le véritable enum .