尝试写:
List<Object> list;
@SuppressWarnings("unchecked")
list = (List<Object>) new Object();
它将在第3行,单词list
上失败,并带有以下内容:
list cannot be resolved to a type
我知道它与注释的工作方式有关。有人知道这背后的原因吗?
编辑:感谢快速回答。无论如何,如果转让也是一个声明,我知道它会起作用。
答案 0 :(得分:2)
您必须将注释放在声明上,而不仅仅是作业。这编译:
@SuppressWarnings("unchecked")
List<Object> list = (List<Object>) new Object();
请参阅SuppressWarnings
的Javadoc,其目标为
@Target(value={TYPE,FIELD,METHOD,PARAMETER,CONSTRUCTOR,LOCAL_VARIABLE})
如果你查找LOCAL_VARIABLE
,它会说:
本地变量声明
(任意语句都没有目标,所以没有注释可能会去那里但仍然允许它编译。)
答案 1 :(得分:1)
来自Sun的Annotation Tutorial:
注释可以应用于程序对类,字段,方法和其他程序元素的声明。
结尾短语“和其他节目元素”令人失望地模糊,但根据The Java Programming Language - Annotations:
定义注释类型后,您可以使用它来注释声明。注释是一种特殊的修饰符,可以在任何可以使用其他修饰符(例如public,static或final)的地方使用。按照惯例,注释在其他修饰符之前。注释由符号(@)后跟注释类型和带括号的元素 - 值对列表组成。值必须是编译时常量。
明确指出Annotations只能应用于声明。
答案 2 :(得分:0)
注释需要放在声明上,而不是表达式
@SuppressWarnings("unchecked") List<Object> lst
= (List<Object>)getProperty("mylist");
list = lst;
如果在其他地方声明list
,您可以使用抑制注释声明一个新的局部变量,然后执行赋值。