2010-05-16 4 views
2

Comment peut-on accéder aux champs ENUM statiques à l'aide invocation JNI APIaccès statique champs ENUM utilisant l'API d'appel JNI

Je suis en train d'accéder à GlassFish énumération org.glassfish.api.embedded.ContainerBuilder.Type de Glassfish api 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 toujours me donne l'erreur Exception in thread "main" java.lang.NoSuchFieldError: web, Comment puis-je accéder à ce champ?

Répondre

6

En fait, je manquais L à l'avant et à la fin de ; classname, je fait des changements suivants

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

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

2

Il existe une méthode dans java.lang.Class getEnumConstants.

Selon doc:

Renvoie les éléments de cette classe ENUM ou null si cet objet classe ne représente pas un type ENUM.

Questions connexes