在泛型中将@SuppressWarnings(“unchecked”)添加到单行生成eclipse编译器错误

时间:2011-09-12 12:21:11

标签: java eclipse generics compiler-errors suppress-warnings

我偶然发现了一个我不理解的奇怪行为。

我必须将一个String转换为泛型,并且它会产生警告。

Type safety : Unchecked cast from String to T
  • 如果我在方法声明上方添加@SuppressWarnings("unchecked") 它工作正常。

  • 如果我将其添加到赋值之上,则会产生编译错误 蚀。

这很好用。

@SuppressWarnings("unchecked")
public <T> T search(final String query){
 T returnValue = null;
 ...
 if(returnValue instanceof String){
  returnValue = (T) collection.getString(attrName);
 }

这不行。

public <T> T search(final String query){
 T returnValue = null;
 ...
 if(returnValue instanceof String){
  @SuppressWarnings("unchecked") // Compiler error: "returnValue cannot be resolved to a type"
  returnValue = (T) collection.getString(attrName);
 }

知道是什么导致了两种抑制警告方法之间的差异?

1 个答案:

答案 0 :(得分:50)

你不能对任意表达式进行注释(但是?可能以后会添加它)。

可以但是在局部变量声明上有注释。

那么编译器尝试在这里做的是将returnValue解释为一种类型(因为这是唯一可以遵循方法体内注释的东西)并且失败。

将注释放在returnValue声明上对这种情况没有帮助。但是,您可以创建一个新的局部变量,在初始化程序中执行强制转换,并对其进行注释。

@SuppressWarnings("unchecked")
T string = (T) collection.getString(attrName);
returnValue = string;