Это моя аннотация:
@Target( { ElementType.METHOD } )
@Retention(RetentionPolicy.RUNTIME)
public @interface AuditUpdate
{
Class<?> value();
}
Таким образом, это нормально:
@AuditUpdate(User.class)
void someMethod(){}
Но так:
private static final Class<?> ENTITY_CLASS = User.class;
@AuditUpdate(ENTITY_CLASS)
void someMethod(){}
У меня есть эта ошибка компиляции:
The value for annotation attribute AuditUpdate.value must be a class literal
Почему? Что это значит?
Спасибо.
Это означает, что вы должны передать литерал класса, а не переменную (даже если константа).
Литерал класса хорошо определен в JLS:
15.8.2 Литералы классов
Литерал класса - это выражение, состоящее из имени класса, интерфейс, массив или примитивный тип, за которым следует `. ' и токен класс. Тип литерала класса - это класс. Он оценивает класс объект для именованного типа (или для void), как определено определяющим класс загрузчика класса текущего экземпляра.
Итак, вы не можете этого сделать.