Использование String.format () в качестве значения атрибута аннотации

У меня есть класс с несколькими константами:

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 на простую строку , она будет работать нормально:

public static final String HAS_ROLE_USER_INTERNAL = "hasRole('ROLE_USER_INTERNAL')";

В чем проблема с использованием String.format () ? Поле имеет значение static и final , что может пойти не так?

6
задан parxier 19 May 2011 в 02:20
поделиться