在generics中将@SuppressWarnings(“unchecked”)添加到单行生成eclipse编译器错误
我偶然发现了一个我不理解的奇怪行为。
我必须将一个String转换为generics,它会产生一个警告。
Type safety : Unchecked cast from String to T
-
如果我在方法声明上面添加
@SuppressWarnings("unchecked")
它可以正常工作。 -
如果我将它添加到赋值之上,它会在eclipse中产生编译错误。
这很好用。
@SuppressWarnings("unchecked") public T search(final String query){ T returnValue = null; ... if(returnValue instanceof String){ returnValue = (T) collection.getString(attrName); }
这不行。
public 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); }
有什么想法导致两种抑制警告方法之间的差异?
你不能在任意表达式上有注释(但是呢?也许他们稍后会添加它)。
但是,您可以对局部变量声明进行注释。
所以编译器在这里尝试做的是将returnValue
解释为一个类型(因为这是唯一可以遵循方法体内注释的东西)并且失败。
在这种情况下, returnValue
注释放在returnValue
的声明中没有帮助。 但是,您可以创建一个新的局部变量,在初始化程序中执行强制转换并对其进行注释。
@SuppressWarnings("unchecked") T string = (T) collection.getString(attrName); returnValue = string;