带注释的奇怪Java错误

时间:2009-06-24 20:17:48

标签: java annotations

尝试写:

List<Object> list;
@SuppressWarnings("unchecked")
list = (List<Object>) new Object();

它将在第3行,单词list上失败,并带有以下内容:

list cannot be resolved to a type

我知道它与注释的工作方式有关。有人知道这背后的原因吗?

编辑:感谢快速回答。无论如何,如果转让也是一个声明,我知道它会起作用。

3 个答案:

答案 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,您可以使用抑制注释声明一个新的局部变量,然后执行赋值。