【问题标题】:Add @SuppressWarnings("unchecked") in generics to single line generates eclipse compiler error将泛型中的 @SuppressWarnings("unchecked") 添加到单行会生成 Eclipse 编译器错误
【发布时间】:2011-11-15 07:25:28
【问题描述】:

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

我必须将字符串转换为泛型,它会产生警告。

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);
 }

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

【问题讨论】:

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


    【解决方案1】:

    您不能在任意表达式上添加注释(但是?也许他们稍后会添加它)。

    可以在局部变量声明上添加注释。

    所以编译器尝试在这里所做的就是将returnValue 解释为一种类型(因为这是唯一可以跟在方法体内的注解后面的东西)并且失败了。

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

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

    【讨论】:

    • 来到这里,因为我不明白Eclipse中的错误“令牌'results'的语法错误,此令牌之后的VariableDeclaratorId”。您对编译器尝试的内容以及失败的原因进行了很好的解释!只需添加此注释,以防其他人搜索此语法错误。
    猜你喜欢
    • 2012-11-29
    • 1970-01-01
    • 1970-01-01
    • 2016-10-30
    • 2019-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多