Наследование аннотаций классов

Есть ли способ, чтобы классы наследовали аннотации из суперкласса?

например.

@ApplicationException(rollback=true)
public abstract class AbstractBeanActionException extends Exception {
    /* method body is simply calls to super() */
}

public class OrderBeanException extends AbstractBeanActionException {
    /* does this class have to be annotated as well ? */
}

Ответ 2

Если вы сами определяете свои классы аннотаций, вы можете использовать @Inherited мета-аннотация:

Указывает, что тип аннотации автоматически унаследован. Если в объявлении типа аннотации присутствует унаследованная мета-аннотация, а пользователь запрашивает тип аннотации в объявлении класса, а объявление класса не имеет аннотации для этого типа, то суперкласс класса автоматически запрашивается для типа аннотации.

Ответ 3

Аннотации не наследуются. Но структура, использующая аннотацию (в данном случае EJB3), может выбирать перемещение по иерархии классов, чтобы увидеть, существует ли она в суперклассе.

Посмотрите на javadoc этой аннотации: он имеет свойство inherited, которое точно указывает, следует ли также применять эту аннотацию к подклассы или нет.

Ответ 4

Аннотации классов не могут быть унаследованы подклассами, но аннотации для нечастных не-конструкторных методов-членов и полей наследуются вместе с методом/полем, с которым они связаны. Поэтому вы можете попробовать использовать их для достижения желаемого эффекта.

Ответ 5

Когда класс помечен аннотацией, которая сама аннотируется с помощью java.lang.annotation.Inherited, вы можете запросить аннотации, которые относятся к классу, а Inherited должны отображаться в результатах.

ApplicationException не помечено как Inherited. Хорошо.