Comment émettre une valeur à partir d'un enum à l'autre en Java?
Comment puis-je lance une valeur de Enum1 Enum 2 en Java?
Voici un exemple de ce que je suis en train de faire :
public enum Enum1 {
ONE,
TWO,
THREE;
}
public enum Enum2 {
FOUR,
FIVE,
SIX;
}
Donc, je veux faire quelque chose comme ceci:
Enum2 en2 = (Enum2)ONE;
Est-il possible, et comment puis-je le faire?
Merci d'avance!
- Qu'attendez-vous
en2
de main quand vous en avez le "cast"Enum1.ONE
- t-il?
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez lancer à partir d'un enum à l'autre, mais chaque enum a garanti l'ordre, et vous pouvez facilement traduire un enum pour un autre (le maintien de l'ordre). Par exemple:
nous pouvons traduire
E1.TWO
vers/à partir deE2.BETA
par:Il n'est pas possible. Enum1 et Enum2 sont de types différents, qui n'ont rien en commun.
enum
type à l'autre, en fonction de ce qu'ils sont censés représenter du point de vue programmation.Vous pouvez définir une méthode dans Enum1 pour revenir au correspondant Enum2:
ou, un peu plus lisible (OMI):
EDIT:
si vous avez besoin de maintenir les 2 enums découplé, la création d'une carte contenant la cartographie de Enum1 à Enum2 (dans une 3e classe utilitaire).
La réponse à cette question dépend de ce que le "casting" est censé faire:
Coulée par position ordinale
Dans l'exemple fourni, il n'y a pas de points communs entre les deux séries de valeurs dans les deux Énumérations, donc je suis en supposant que l'intention était de traduire en position ordinale tels que
Enum1.ONE
=>Enum2.FOUR
,Enum1.TWO
=>Enum2.FIVE
etEnum1.THREE
=>Enum2.SIX
. Cela peut être fait comme suit:La prochaine question est de savoir comment cela peut être étendue à une fonction générique qui ferait la même chose pour toutes les deux
enum
types. Pas pour les timides, mais la suivante sera de faire le travail (il faut Goyave):Si Google Goyave bibliothèque n'est pas présent, il peut être fait manuellement en un peu plus de lignes de code:
Exemple d'utilisation:
Coulée par le partage de valeur d'énumération des noms de
Il y a un autre moyen de mettre entre les énumérations qui partagent les mêmes noms de valeur:
E. g:
Ce casting ne fonctionne que pour le commun des valeurs (c'est à dire
UNKNOWN
etNOT_APPLICABLE
ci-dessus) et peut être fait comme suit:Cette va lancer une IllegalArgumentException si le nom de la valeur n'existe pas dans la cible enum. Cette fois, le générique de la méthode peut être un peu plus simple:
Exemple d'utilisation:
Vous ne pouvez pas faire cela, parce qu'ils sont des objets de classes différentes.
Vous pourriez convertir de l'un à l'autre fondée sur la valeur ordinale ou de nom, mais je l'avais question de la conception de tout programme nécessaire pour le faire.
Vous ne pouvez pas, mais vous pouvez créer une méthode statique dans votre enums, avec un code de traduction. Mais vous devez avoir une idée claire sur les règles que vous souhaitez mettre en œuvre.
enum Enum1 { ONE { public Enum2 toEnum2() { return Enum2.FOUR; } },...
vous devez également ajouter une méthode abstraite de l'ensemble de l'enum.Même si ce ticket a été active tout à fait il ya un moment, je suis en ajoutant une autre possibilité:
Vous pouvez également créer une Carte par exemple comme ceci:
utilisation
(+) vous n'avez pas à vérifier l'ordre de vos éléments
(+) facile à lire
(+) rapide
(-) nécessite de l'espace
Corrigez-moi si je me trompe 🙂
Une opération de cast n'est pas possible, mais vous pouvez écrire une fonction membre statique pour enum1 qui jette enum2 à enum1:
Par la manière, vous pouvez attribuer un ID à chaque constante de deux énumérations qui simplifie la mise en œuvre.
Ici est un tutoriel sur la enums.
Il ne sera probablement pas vous aider, mais vous pouvez avoir
Nous n'avons pas assez d'informations sur ce que vous essayez de faire pour vous aider.
Il ne fait aucun sens que c'est de jeter un enum pour un autre enum.
Vous ne pouvez lancer à partir d'un enum à l'autre, mais chaque enum a garanti l'ordre, et vous pouvez facilement traduire un enum pour un autre
Vous pouvez le faire en utilisant de façon simple: