【发布时间】:2011-05-19 02:14:34
【问题描述】:
我有一个有许多常量的类:
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,有什么可能出错?
【问题讨论】:
标签: java annotations constants string-formatting