Java编译器错误没有任何意义(<;标识符>;应为)

Java编译器错误没有任何意义(<;标识符>;应为),java,casting,Java,Casting,我已经做了大量的搜索,寻找这个编译器错误所期望的意味着什么,但它们似乎都不适用于我的情况。真的很抱歉,如果这是一个重复的或基本的信息,但我找不到任何地方 下面的代码工作正常。请注意,我是肯定的myObject1确实是一个HashSet,因此转换是正常的 @SuppressWarnings("unchecked") HashSet<String> s1 = (HashSet<String>) myObject1; @SuppressWarnings(“未选中”) Hash

我已经做了大量的搜索,寻找这个编译器错误
所期望的
意味着什么,但它们似乎都不适用于我的情况。真的很抱歉,如果这是一个重复的或基本的信息,但我找不到任何地方

下面的代码工作正常。请注意,我是肯定的
myObject1
确实是一个
HashSet
,因此转换是正常的

@SuppressWarnings("unchecked")
HashSet<String> s1 = (HashSet<String>) myObject1;
@SuppressWarnings(“未选中”)
HashSet s1=(HashSet)myObject1;
以下代码无法正常工作。它将编译,但带有警告

@SuppressWarnings("unchecked")
HashSet<String> s1;
s1 = (HashSet<String>) myObject1;
@SuppressWarnings(“未选中”)
散列集s1;
s1=(HashSet)myObject1;
然后我尝试下面的代码

@SuppressWarnings("unchecked")
HashSet<String> s1;
@SuppressWarnings("unchecked")
s1 = (HashSet<String>) myObject1;
@SuppressWarnings(“未选中”)
散列集s1;
@抑制警告(“未选中”)
s1=(HashSet)myObject1;
现在它甚至拒绝编译,给了我一个让我非常困惑的
预期的
错误。我的命令行中的
^
符号正好指向最后一行中的
=
。我不确定在
s1
=
之间到底应该放些什么


有什么想法吗?谢谢

不能将注释应用于简单赋值语句。发件人:

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


我同意编译器错误信息可能会更清晰,诚然…

您可以查看Java Api以获取注释

您可以看到,SupersSwarnings具有目标局部变量


局部变量表示声明而不是赋值。

谢谢Jon。我稍微编辑了我的作品,以反映我真正想要做的事情。如果我想在一行上声明
s1
,但稍后分配它。。。有没有办法抑制我在作业中收到的警告?当然,除了为整个方法添加注释外,这看起来很草率。使用临时变量,稍后将临时变量分配给s1,而临时变量具有正确的类型由于编译器需要在那里声明,
s1
被解析为类型名,当然,它希望接下来命名一个类型为
s1
的实体。在问题的范围之外,您应该使用
Set
而不是
HashSet
。即使您知道开发阶段的实现类,也应该考虑接口。如果有人后来决定将代码移动到
TreeSet
,团队必须更改所有具有
HashSet
的文件,并将其移动到
TreeSet
?谢谢Luiggi,我知道你刚刚在不同的问题中告诉我同样的事情,我仍然在这里犯同样的错误。。。感谢您的提醒。:-)