Ответ 1
В правилах Java говорится, что когда у вас есть аннотация, и у нее есть параметр, который ожидает примитивный тип (например, int
) или String
, значение должно быть постоянным выражением. [Это не имеет ничего общего с Spring.] Грубо говоря, константное выражение - это значение, значение которого компилятор может определить во время компиляции. Однако существуют правила для того, что представляет собой постоянное выражение. Эти правила находятся в JLS 15.28. В постоянном выражении могут использоваться только определенные типы операций. Вызов метода, такой как Long.toString()
, не является одним из них. Поэтому использование этого выражения не является постоянным выражением, хотя оно выглядит так, как должно быть. (Это похоже на вас, потому что вы знаете, что делает Long.toString
. Однако компилятор не сохраняет каталог всех методов, чтобы знать, какие из них являются "постоянными" методами, значения которых можно вычислить во время компиляции.)
Однако пример в ссылке показывает, что оператор +
может использоваться, даже если один из аргументов не является строкой, и поэтому метод toString()
неявно называется. Это говорит о том, что вы можете заставить все работать так:
private static final String MAX_LONG_AS_STRING = "" + Long.MAX_VALUE;
Я еще не пробовал.