Я не могу использовать перечисление, взятое с постоянной в качестве параметра в аннотации. Я получаю эту ошибку компиляции: «Атрибут значения для аннотации [атрибут] должен быть постоянным выражением перечисления». < /P>
Это упрощенная версия кода для перечисления: < /p>
public enum MyEnum {
APPLE, ORANGE
}
< /code>
для аннотации: < /p>
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.METHOD })
public @interface MyAnnotation {
String theString();
int theInt();
MyEnum theEnum();
}
< /code>
и класс: < /p>
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() {
}
}
< /code>
Ошибка отображается только в «theenum = myenum_constant». Строка и константы int в порядке с компилятором, константа перечисления не является, даже если это то же значение, что и то же самое, что и то же самое, что и то же самое, что и то же самое, что и то же самое, что и то же самое, что и то же значение. Взгляд на меня, как это, не хватает в компиляторе, потому что все три, очевидно, являются постоянными. Нет никаких вызовов метода, не странного использования классов и т. Д. < /p>
Чего я хочу достичь: < /p>
использовать myenum_constant как в аннотации, так и позже в коде. /> Любой способ достижения этих целей был бы в порядке. < /p>
edit: < /strong> < /p>
Спасибо всем. Как вы говорите, это не может быть сделано. JLS должен быть обновлен. На этот раз я решил забыть об перечислениях в аннотациях и использовать обычные константы Int. Пока INT назначается из именованной постоянной, значения ограничены, и это «виды» типа Safe. < /P>
Похоже: < /p>
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() {
...
< /code>
И я могу использовать myenumsimul_constant в любом месте в коде. < /p>
Подробнее здесь: https://stackoverflow.com/questions/132 ... nt-in-java
Как обеспечить значение перечисления в аннотацию от константы в Java ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение