Я использовал AOP Guice для перехвата вызовов некоторых методов. Мой класс реализует интерфейс, и я хотел бы аннотировать методы интерфейса, чтобы Guice мог выбрать правильные методы. Даже если тип аннотации аннотируется классом реализации аннотации Inherited, он не наследует аннотацию, как указано в java-документе Inherited:
Также обратите внимание, что эта мета-аннотация только вызывает наследование аннотаций от суперклассов; аннотации к реализованным интерфейсам не действуют.
Что могло быть причиной этого? Ознакомиться со всеми интерфейсами, которые класс объекта реализует во время выполнения, не так уж и сложно, поэтому для этого решения должна быть веская причина.
источник
The field value is ambiguous.
-подобную ошибку компилятора, как если бы два интерфейса объявляли одну и ту же константу с разными значениями. Я знаю, что это не поле, но все значения аннотации разрешаются во время компиляции, не так ли? Функция, которую нам здесь не хватает, была бы очень полезной во многих случаях. Извините, кстати, что возродил старый пост :).Foo
аннотацию '(MyClass
ее нет, тогда интерфейсы ищутся и берутся в том порядке, в котором они следуютimplements
) и, следовательно, печатает «baz». Прохладно.Из Javadoc для @Inherited:
С другой стороны, валидаторы JSR 305 выполняют своего рода поиск наследования. Если у вас есть иерархия классов:
Тогда эффективная валидация на
Student.getAge()
это@Nonnull @Min(5)
.@Nonnull
не имеет@Inherited
метааннотации.источник
@Inherited
это не влияет ни на что, кроме класса