我已经做了很多搜索这个编译器错误<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
和=
之间放置什么。
有什么想法吗?谢谢!
答案 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代表声明而非作业。