java注释参数:显式与隐式字符串数组
为什么我的场景中的第二个测试在SuppressWarnings
行上有语法错误The value for annotation attribute SuppressWarnings.value must be an array initializer
public class AnnotationTest {
private static final String supUnused = "unused";
private static final String supDeprecation = "deprecation";
private static final String[] suppressArray = { "unused", "deprecation" };
public static void main(String[] args) {
// Test 1
@SuppressWarnings( { supUnused, supDeprecation } )
int a = new Date().getDay();
// Test 2
@SuppressWarnings(suppressArray) // syntax error
int b = new Date().getDay();
}
}
如果您将参数作为两个单一常量传递,则它会起作用
如果使用数组常量传递,则会出现语法错误
这个错误的原因是什么
# 1 楼答案
注释参数必须是常量
suppressArray
被声明为final
,但这只意味着不能用另一个数组引用重新分配suppressArray
变量。您仍然可以更改suppressArray
的内容,例如在第一个示例中,使用数组初始值设定项内联
因此,没有其他类可以获得对它的引用,因此不能更改数组的内容
至少看一下JLS 9.7.1可以给出详细的解释
注释参数是名称-值对,其中
T
是名称-值对的类型,而V
是值:及