Ошибка установки значения аннотации как классаот константы, почему? - PullRequest
2 голосов
/ 19 декабря 2011

Это моя аннотация:

@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

Почему? Что это значит?

Спасибо.

1 Ответ

5 голосов
/ 19 декабря 2011

Это означает, что вы должны передавать литерал класса, а не переменную (даже если она постоянная).

Литерал класса четко определен в JLS :

15.8.2 Литералы класса

Литерал класса - это выражение, состоящее из имени класса, тип интерфейса, массива или примитива, за которым следует `. ' и знак учебный класс. Тип литерала класса - Класс. Оценивает класс объект для именованного типа (или для void), как определено определяющим Загрузчик классов класса текущего экземпляра.

Итак, вы не можете этого сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...