Je veux obtenir une instance à un type d'énum, de sorte que: Cela me donne un type inconvertible. P> P>
3 Réponses :
Vous recherchez myClass.myenum.valueof (Enumstring) code>. Pas besoin de qualifier complètement la classe dans la chaîne. P>
classe s'étend enum> code>. Exemple:
Pourquoi une réflexion sera-t-elle requise? Pourquoi pas seulement myenum e = Enum.valueof (myenum.class, "ABC");
L'auteur de la question initiale a suggéré d'utiliser la réflexion en utilisant class.forname code> et marquage de la question avec la balise
réflexion code>. La partie délicate est que le type de retour de
forclass code> n'est pas le type droit à passer à
enum.valueof code>.
Si vous connaissez le type Enum à la compilation, comme dans le code d'échantillon de l'auteur, la réflexion n'est pas requise.
La question est "Java Créer une instance d'Enum via la réflexion b>". Le code exemple illustre probablement une approche qui n'a pas fonctionné.
Nous n'avons pas assez d'informations pour savoir si la réflexion est une exigence pour cet utilisateur ou un détail de mise en œuvre présumé nécessaire. D'ici la question de Bozho ci-dessus et de mes éclaircissements pour la personne posant la question. Ce n'est pas une critique de vous, simplement une clarification.
@Andythomas "Pourquoi une réflexion serait-elle requise?" Parce que la classe n'est pas connue au moment de la compilation. Ce n'est probablement pas le cas pour l'OP puisque l'autre réponse a été acceptée, mais ce serait néanmoins la raison. J'ai juste une telle situation, c'est pourquoi je suis ici (n'a pas réalisé que Enum avait une valeur d'une classe). J'ai besoin de gérer la saisie de l'utilisateur de chaîne qui pourrait être un type d'énumération possible (pas seulement la valeur), même une personne qui n'existe pas encore. La réflexion est complètement nécessaire dans mon cas, même si ce n'est dans l'OP.
En outre, dans mon cas particulier, je dois aller plus loin et garantir que le type d'énumération arbitraire est également un sous-type d'une interface spécifique et renvoie la valeur ENUM comme ce type. "Enum Mye implémente MyI" Il doit fonctionner uniquement pour tous les énumjets de MyI code> qui ne sont pas tous connus à l'avance. Pour les futurs lecteurs: après avoir utilisé la méthode dans la réponse ci-dessus, je l'ai également lancé sur
MyI code> avec
myI.class.cast (Enum.valueof (FoundClass, Enumvalue)); Code > Je suis paresseusement (non suggéré) Laissez mon gestionnaire d'exception attraper des moulages non valides, mais vous pouvez vérifier si
myI.class.isinstance (Enum.valueof (...)) code>
Si vous connaissez le type à la compilée, pourquoi avez-vous besoin de réflexion?
J'ai déclaré une chaîne pour simplifier le code. De toute évidence, dans mon code, l'enumstring n'est pas codé dur, mais transmis comme un paramètre.