Следующий пример иллюстрирует основную проблему.
public class MyClass {
private @Foo MyClass _myClass;
public void test() {
// the type information for the `_myClass` reference does not include the `@Foo` annotation
Object obj = _myClass;
}
}
Используя обработчик аннотаций или плагин компилятора, вы можете проверить тип инициализатора _myClass
в объявлении переменной Object obj = _myClass
.
В частности, поле JCTree.JCIdent#type
, соответствующее ссылке _myClass
, не содержит аннотации @Foo
в метаданных. Это кажется общей проблемой в компиляторе - все метаданные аннотации теряются во время присвоения выражений и т. Д. Это предотвращает целый класс функций, которые в противном случае могли бы работать с аннотацией.
Или, может быть, я упускаю что-то очевидное?
Я бы предпочел зарегистрировать это как запрос функции на JDK Bug tracker , но это закрытая система: (
Я надеюсь, что кто-то из этого проекта может скрываться здесь и может предложить больше информации.