У меня есть класс, который имеет несколько констант:
public class SecurityConstants {
private static final String HAS_ROLE_TEMPLATE = "hasRole('%s')";
public static final String ROLE_USER_INTERNAL = "ROLE_USER_INTERNAL";
public static final String HAS_ROLE_USER_INTERNAL = String.format(HAS_ROLE_TEMPLATE, ROLE_USER_INTERNAL);
}
Если я тогда попытаюсь использовать HAS_ROLE_USER_INTERNAL
в качестве @PreAuthorize
значения атрибута аннотации, как этот @PreAuthorize(SecurityConstants.HAS_ROLE_USER_INTERNAL)
компилятор завершится неудачно с:
Значение атрибута аннотации PreAuthorize.value должно быть константным выражением
Однако, если я изменю HAS_ROLE_USER_INTERNAL
на простой String
, все будет работать нормально:
public static final String HAS_ROLE_USER_INTERNAL = "hasRole('ROLE_USER_INTERNAL')";
В чем проблема с использованием String.format()
?Поле static
и final
, что может пойти не так?