6

我已经做了很多搜索来寻找这个编译器错误<identifier> expected的含义,但它们似乎都不适用于我的情况。如果这是重复或基本信息,真的很抱歉,但我在任何地方都找不到任何东西。

以下代码工作正常。请注意,我myObject1确实是肯定的HashSet<String>,所以演员阵容还可以。

@SuppressWarnings("unchecked")
HashSet<String> s1 = (HashSet<String>) myObject1;

以下代码无法正常工作。它将编译,但带有警告。

@SuppressWarnings("unchecked")
HashSet<String> s1;
s1 = (HashSet<String>) myObject1;

那么我尝试下面的代码。

@SuppressWarnings("unchecked")
HashSet<String> s1;
@SuppressWarnings("unchecked")
s1 = (HashSet<String>) myObject1;

现在它甚至拒绝编译,给我带来了让我<identifier> expected非常困惑的错误。^我的命令行中的符号指向=最后一行的之前。我不确定我到底应该把什么放在s1和之间=

有任何想法吗?谢谢!

4

2 回答 2

11

您不能将注释应用于简单的赋值语句。从JLS 的第 9.7 节

注释可以在任何声明中用作修饰符,无论是包(§7.4.1)、类(§8.1.1)(包括枚举(§8.9))、接口(§9.1.1)(包括注释类型(§9.6) )、字段 (§8.3.1、§9.3)、方法 (§8.4.3、§9.4)、形参 (§8.4.1)、构造函数 (§8.8.3) 或局部变量 (§14.4.1) .

我同意编译器错误消息可能会更清楚,诚然......

于 2012-10-14T21:46:19.163 回答
1

您可以查看 Java Api for Annotations。

http://docs.oracle.com/javase/6/docs/api/java/lang/SuppressWarnings.html

http://docs.oracle.com/javase/6/docs/api/java/lang/annotation/ElementType.html#LOCAL_VARIABLE

在那里你可以看到,SupressWarnings 的目标是 LOCAL_VARIABLE。

LOCAL_VARIABLE 代表声明而不是赋值。

于 2012-10-14T21:47:30.380 回答