kos*_*tja 7 java annotations element
我天真地试图做一个简单的问题:
public void someMethod(){
int x = 0;
...
@SuppressWarnings({"rawtypes", "unchecked"})
x = ((Comparable)lhs).compareTo(rhs);
...
}
Run Code Online (Sandbox Code Playgroud)
这是非法的,必须改写为编译:
public void someMethod(){
...
@SuppressWarnings({"rawtypes", "unchecked"})
int x = ((Comparable)lhs).compareTo(rhs);
...
}
Run Code Online (Sandbox Code Playgroud)
我已经将问题追溯到ElementType:一个语句似乎不是一个有效的程序元素.这是相当混乱的 - 我认为语句类似于所有编程元素的超类型.
是否存在限制有效元素的理论或技术原因?
它可以用不同的方式完成 - 也就是说我可以ElementType
用我自己的班级取代并掌握涟漪变化,我可以诠释任何陈述吗?
Ern*_*ill 11
如果您查看Javadoc,@SuppressWarnings
您将看到答案:它声明的目标是
@Target(value={TYPE,FIELD,METHOD,PARAMETER,CONSTRUCTOR,LOCAL_VARIABLE})
Run Code Online (Sandbox Code Playgroud)
换句话说,它不能合法地适用于声明.但是,它可以应用于变量声明.它与语句是否是程序元素无关; 它基本上是因为这个注释仅适用于事物的声明.
此外,如果您查看Javadoc以获取描述可以注释的内容的枚举,则语句和表达式不在其中.通常,注释可以应用于事物的声明,而不是代码.
理论上的原因只是注释被存储为类文件中声明的各个项的属性.声明不符合资格; 在编译代码时,语句已不复存在.只有一个字节码流,并且它来自的语句的唯一提醒是(可选的)行号表.为了解决这个问题,他们需要在类文件中添加一个新属性来引用各个字节码,就像在本提案中一样,并处理由此产生的许多复杂性.