java class.getAnnotation (Class <?> class) возвращает ноль - PullRequest
0 голосов
/ 28 июня 2018

Я написал аннотацию:

@Documented
@Retention(RUNTIME)
@Target(TYPE)
/**
 * @author christian
 *
 */
public @interface HeraklesObject {

}

Я использую его в среде osgi (затмение кислородом с tycho) в связке. В другом пакете (конкретный тестовый фрагмент) я проверяю классы из первого комплекта для этой аннотации, используя:

class.getAnnotation(HeraklesObject.class)

Я уверен, что у запрашиваемого класса есть эта аннотация, но я всегда получаю нулевой результат.

Мне кажется правильной политика хранения, но я не уверен, что проблема с загрузчиком классов присутствует, и я не знаю, как это проверить. Или вы видите другую причину? Спасибо Christian

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Содержит ли пакет с классом, аннотации среды выполнения которого вы хотите проверить, или импортирует пакет с классом аннотаций HeraklesObject?

Загрузчик класса загрузит класс и, если класс класса аннотации времени выполнения не виден, просто проигнорируйте аннотацию. Таким образом, вы в конечном итоге с тихим «провалом». Поэтому убедитесь, что пакет, содержащий аннотацию среды выполнения, виден для пакета, содержащего аннотированный класс.

Если вы используете Bnd для сборки пакета, он должен правильно импортировать пакет аннотации времени выполнения.

0 голосов
/ 28 июня 2018

Попробуйте использовать

@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE })

Также из Как получить аннотацию к классу в Java?

использовать

Class newClass = X.class;

for (Annotation annotation : newClass.getDeclaredAnnotations()) {
    System.out.println(annotation.toString());
}
...