2 votes

Accès aux champs statiques des enums à l'aide de l'API d'invocation JNI

Comment accéder aux champs statiques des enums en utilisant l'API d'invocation JNI ?

J'essaie d'accéder à glassfish org.glassfish.api.embedded.ContainerBuilder.Type l'énumération de l'api Glassfish en utilisant le code suivant

jclass Type= env->FindClass( 
    "org/glassfish/api/embedded/ContainerBuilder$Type");
jfieldID Type_web=env->GetStaticFieldID(
    Type,"web","org/glassfish/api/embedded/ContainerBuilder$Type");

Mais cela me donne toujours l'erreur suivante Exception in thread "main" java.lang.NoSuchFieldError: web Comment puis-je accéder à ce champ ?

6voto

Xinus Points 7693

En fait, il me manquait L à l'avant et ; à la fin du nom de la classe, j'ai fait les changements suivants

jfieldID Type_web=env->GetStaticFieldID(
    Type,"web","Lorg/glassfish/api/embedded/ContainerBuilder$Type;");

2voto

Alexander Pogrebnyak Points 24964

Il existe une méthode dans java.lang.Class [getEnumConstants](http://java.sun.com/javase/6/docs/api/java/lang/Class.html#getEnumConstants()) .

Selon le document :

Retourne les éléments de cet enum ou null si cet objet Class ne représente pas un type d'énumération.

1voto

crazyscot Points 6675

Je n'ai pas utilisé la réflexion pour examiner les classes enum moi-même, mais il est possible qu'elles soient stockées d'une manière étrange. Dans votre situation, je ferais appel à Class.getFields() et jetez un coup d'œil à la liste des champs de la classe.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X