Java编译器错误没有任何意义(<identifier> expected)</identifier>

时间:2012-10-14 21:37:54

标签: java casting

我已经做了很多搜索这个编译器错误<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=之间放置什么。

有什么想法吗?谢谢!

2 个答案:

答案 0 :(得分:11)

您无法将注释应用于简单的赋值语句。来自section 9.7 of the JLS

  

注释可以在任何声明中用作修饰符,无论是包(第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) 0.1)。

我同意编译器错误信息可能相当清楚,诚然......

答案 1 :(得分: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代表声明而非作业。