Избавьтесь от сообщения "Значение атрибута annotation должно быть константным выражением"
Я использую аннотацию в своем коде, и я пытаюсь использовать значение, которое определяется во время выполнения.
Я определяю свой список как static final
(lst), и я добавляю к этому списку некоторые элементы.
Когда я использую lst.get(i)
, я получаю ошибку компиляции:
The value for annotation attribute must be a constant expression
Каково решение этой проблемы?
Ответы
Ответ 1
Значение для аннотации должно быть постоянной времени компиляции, поэтому не существует простого способа сделать то, что вы пытаетесь сделать.
См. также здесь: Как указать значение для аннотации из константы Java
Можно использовать некоторые инструменты времени компиляции (ant, maven?), Чтобы сконфигурировать его, если значение известно до того, как вы попытаетесь запустить программу.
Ответ 2
это бессмысленное ограничение; просто потому, что он был реализован таким образом, это не значит, что это правильный путь. возможно, они, возможно, захотели пойти поэтапно и сначала реализовали ограничения проверки времени компиляции, но это не значит, что мы должны останавливаться на достигнутом и обходить его гибкость.
Я думаю, что пришло время поднять шум о необходимости проверки ограничений времени выполнения, даже если это вызвало небольшой удар производительности. те ограничения, которые имеют значения времени компиляции, должны быть проверены с использованием реализаторов проверки времени компиляции, а те, у которых есть значения времени выполнения, должны быть проверены с использованием реализаторов проверки выполнения.
Нам следует лучше поднять запрос на повышение с экспертной комиссией JSR 303 для добавления этой функции или, возможно, это ограничение самой функции Annotation, поэтому запрос должен быть отправлен в группу экспертов JSR-250, если она все еще в силе.
Ответ 3
Вот как выглядит постоянное выражение в Java:
package com.mycompany.mypackage;
public class MyLinks {
// constant expression
public static final String GUESTBOOK_URL = "/guestbook";
}
Вы можете использовать его с аннотациями следующим образом:
import com.mycompany.mypackage.MyLinks;
@WebServlet(urlPatterns = {MyLinks.GUESTBOOK_URL})
public class GuestbookServlet extends HttpServlet {
// ...
}