Как предоставить значение Enum для аннотации из константы в Java

Я не могу использовать Enum, взятый из константы, в качестве параметра в аннотации. Я получаю эту ошибку компиляции:Значение атрибута аннотации [атрибут] должно быть константным выражением перечисления ".

Это упрощенная версия кода для Enum:

public enum MyEnum {
    APPLE, ORANGE
}

Для аннотации:

@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.METHOD })
public @interface MyAnnotation {
    String theString();

    int theInt();

    MyEnum theEnum();
}

И класс:

public class Sample {
    public static final String STRING_CONSTANT = "hello";
    public static final int INT_CONSTANT = 1;
    public static final MyEnum MYENUM_CONSTANT = MyEnum.APPLE;

    @MyAnnotation(theEnum = MyEnum.APPLE, theInt = 1, theString = "hello")
    public void methodA() {

    }

    @MyAnnotation(theEnum = MYENUM_CONSTANT, theInt = INT_CONSTANT, theString = STRING_CONSTANT)
    public void methodB() {

    }

}

Ошибка отображается только вtheEnum = MYENUM_CONSTANT " более метод B. С константой String и int все в порядке, а с константой Enum - нет, хотяТочно такое же значение, как у метода. Похоже, это отсутствующая функция компилятора, потому что все три, очевидно, являются константами. Здесь нет вызовов методов, нет странного использования классов и т. Д.

Чего я хочу достичь:

Использовать MYENUM_CONSTANT как в аннотации, так и позже в коде.Чтобы оставаться в безопасности.

Любой способ достижения этих целей будет в порядке.

Редактировать:

Спасибо всем. Как вы говорите, это не может быть сделано. JLS должен быть обновлен. На этот раз я решил забыть о перечислениях в аннотациях и использовать обычные int-константы. Пока int назначается из именованной константы, значения ограничены, и это "вроде, как бы, что-то вроде" введите безопасный.

Это выглядит так:

public interface MyEnumSimulation {
    public static final int APPLE = 0;
    public static final int ORANGE = 1;
}
...
public static final int MYENUMSIMUL_CONSTANT = MyEnumSimulation.APPLE;
...
@MyAnnotation(theEnumSimulation = MYENUMSIMUL_CONSTANT, theInt = INT_CONSTANT, theString = STRING_CONSTANT)
public void methodB() {
...

И я могу использовать MYENUMSIMUL_CONSTANT где-нибудь еще в коде.

Ответы на вопрос(5)

Ваш ответ на вопрос