bob*_*bel 0 java arrays string annotations
为什么我的场景中的第二个测试在行The value for annotation attribute SuppressWarnings.value must be an array initializer上有语法错误SuppressWarnings?
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();
}
}
Run Code Online (Sandbox Code Playgroud)
如果您将参数作为两个单一常量传递,则可以正常工作.
如果您使用数组常量传递它,则会出现语法错误.
这个错误的解释是什么?
如果您使用数组常量传递它,则会出现语法错误.
注释参数必须是常量.
该suppressArray声明final,但这只意味着你不能重新分配suppressArray与另一个数组引用变量.您仍然可以更改suppressArray内容,例如
suppressArray[0] = "someOtherString";
Run Code Online (Sandbox Code Playgroud)
在第一个示例中,您使用内联的数组初始值设定项.
@SuppressWarnings( { supUnused, supDeprecation } )
Run Code Online (Sandbox Code Playgroud)
因此,没有其他类可以获取对它的引用,因此无法更改数组的内容.
至少看看JLS 9.7.1给出了详细的解释.
注释参数是名称值对,其中T是名称值对的类型,而V值是:
- 如果T是基本类型或String,则V是常量表达式(第15.28节).
- V不为空.
- 如果T是Class,或者是Class的调用,则V是类文字(第15.8.2节).
- 如果T是枚举类型,则V是枚举常量.
和
ElementValueArrayInitializer类似于普通数组初始值设定项(第10.6节),但允许使用注释代替表达式.
| 归档时间: |
|
| 查看次数: |
1159 次 |
| 最近记录: |