gpt4 book ai didi

java - 使用 String.format() 作为注释属性值

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:07:27 24 4
gpt4 key购买 nike

我有一个包含许多常量的类:

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) 编译器失败并显示:

The value for annotation attribute PreAuthorize.value must be a constant expression

但是,如果我将 HAS_ROLE_USER_INTERNAL 更改为简单的 String,它就可以正常工作:

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

使用 String.format() 有什么问题?字段是 staticfinal,可能会出什么问题?

最佳答案

String.format() 的值在编译时是未知的,而 String 字面值是。

由于注释是已编译类的元数据,因此在编译器生成最终 .class 文件时必须知道它们的值。由于 String.format() 的值只有在代码实际运行后才会知道,编译器不会让您将它用作注释的一部分。

关于java - 使用 String.format() 作为注释属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6053071/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com