par*_*ier 6 java annotations constants string-formatting
我有一个有许多常量的类:
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);
}
Run Code Online (Sandbox Code Playgroud)
如果我再尝试使用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')";
Run Code Online (Sandbox Code Playgroud)
使用有什么问题String.format()?现场是static和final,有什么能可能出错?
String.format()在编译时不知道值,而String文字是.
由于注释是编译类的元数据,因此在编译器生成最终.class文件时必须知道它们的值.由于String.format()只有在代码实际运行后才会知道值,编译器不允许您将其用作注释的一部分.
| 归档时间: |
|
| 查看次数: |
3851 次 |
| 最近记录: |