L'extension d'un enum en Java
J'ai un enum, appelons-la Une:
public enum A
{
A,
B
}
J'ai une fonction qui prend un enum Un:
public void functionA(A enumA)
{
//do something
}
Comment puis-je créer un autre enum, peut-être appeler B que je peux passer à functionA? Quelque chose comme ceci?
public enum B
{
C
}
functionA(B.C);
Je sais que vous ne pouvez pas prolonger un enum, mais quelles sont les autres options dont je dispose? Quelle est la meilleure façon d'atteindre cet objectif?
- Qu'espérez-vous accomplir en faisant cela? La raison
functionA
prend unA
paramètre est parce qu'il prévoit, en particulier, seules les valeurs. Supposons que vous pourrait en quelque sorte de le tromper en prenant une autre valeur à partir d'une étendue d'enum. Quelle serait la fonction de savoir quoi faire avec elle? - Im essayant d'ajouter un nouveau enum qui est similaire à l'existant, mais ne fait pas de sens d'ajouter de la valeur. J'espérais que je ne devriez pas avoir à modifier la fonction du tout à gérer.
- Veuillez être plus précis. Il serait utile de parler de ce que la fonction ne fait, et que les valeurs d'énumération sont, et pourquoi la nouvelle énumération doivent être traitées par la même fonction.
- double possible de Peut enums être sous-classé pour ajouter de nouveaux éléments?
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas.
Types Enum sont en finale de la conception.
La raison en est que chaque type enum doit avoir seulement les éléments déclarés dans l'enum (comme on peut les utiliser dans une instruction switch, par exemple), et ce n'est pas possible si vous le permettez extension du type.
Vous pourriez faire quelque chose comme ceci:
Noter qu'il n'est pas possible de faire un
switch
avec cette interface, puis. (Ou, en général, ont uneswitch
avec un objet qui pourrait provenir de plus d'unenum
).switch(x) { case A: case B: case C: }
si A, B et C ne sont pas définis dans le même type enum.enum A { A, B, C; }
), ou plusieurs types enum, mais pour ce dernier, il n'y a pas d'instruction switch. L'instruction switch exige qu'il y a un nombre fini d'éléments de, ce qui est contraire à vous en ajoutant plus les valeurs de l'enum.Vous pouvez implémenter une interface commune
switch
vous pouvez ajouter une méthode à l'interfacedoSomething()
que vous pouvez appeler. Chaque méthode met en œuvre ce que vous mettez dans le bloc de commutateurs.Vous ne pouvez pas faire des Énumérations étendre à d'autres Énumérations, mais vous pouvez déclarer une interface tous vos Énumérations peuvent implment. L'interface devra inclure toutes les méthodes que vous attendez pour appeler à votre les valeurs de l'Enum. Voici un exemple...
Le seul problème avec cette solution est qu'il enlève votre capacité à utiliser l'énumération que vous le feriez normalement comme dans les instructions switch parce que les ordinaux et les valeurs peuvent ne pas être unique plus.
Cela devrait répondre à votre question, mais je doute qu'il va réellement vous aider avec votre problème. 🙁
Vous devez ajouter un élément C de votre enum A. Si c'est quelque chose sans rapport et en ajoutant qu'il n'a pas de sens, functionA() ne devrait probablement pas être le seul à le gérer.