Доступ к статическим полям enum с помощью API вызова JNI - PullRequest
2 голосов
/ 16 мая 2010

Как мы можем получить доступ к статическим полям enum, используя API вызова JNI

Я пытаюсь получить доступ к Glassfish org.glassfish.api.embedded.ContainerBuilder.Type Перечисление из API Glassfish, используя следующий код

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

Но это всегда дает мне ошибку как Exception in thread "main" java.lang.NoSuchFieldError: web, Как я могу получить доступ к этому полю?

Ответы [ 3 ]

6 голосов
/ 13 июня 2010

На самом деле мне не хватало L спереди и ; в конце имени класса, я сделал следующие изменения

jfieldID Type_web=env->GetStaticFieldID(
    Type,"web","Lorg/glassfish/api/embedded/ContainerBuilder$Type;");
2 голосов
/ 16 мая 2010

В java.lang есть метод. Класс getEnumConstants .

Согласно документу:

Возвращает элементы этого перечисления класс или нуль, если этот объект класса не представляет тип перечисления.

1 голос
/ 16 мая 2010

Я сам не использовал рефлексию для просмотра классов enum, но возможно, что они хранятся странным образом. В вашей ситуации я бы позвонил в Class.getFields() и посмотрел бы список полей класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...