代码之家  ›  专栏  ›  技术社区  ›  riddle_me_this He Drunh

为什么我的@SuppressWarnings(“未选中”)被忽略?

  •  1
  • riddle_me_this He Drunh  · 技术社区  · 9 年前

    为什么Javac忽略了我的 @SuppressWarnings 下面代码中的注释?

    @Override
    @Transactional(readOnly = true, timeout = 10)
    public List<Item> findAllDue() {
        Query query = getSession().createQuery("from Item item where item.status = :status");
        @SuppressWarnings("unchecked")
        List<Item> list = query.setString("status", ItemState.MY_STRING_STATUS).list(); //This is line 43.  yes, I know it can be an Enum instead
        return list;
    }
    

    使用Xlint编译后,以下是警告:

    Warning:(43, 106) java: unchecked cast
      required: java.util.List<com.company.domain.Item>
      found:    java.util.List
    

    editor image

    terminal output

    2 回复  |  直到 9 年前
        1
  •  1
  •   riddle_me_this He Drunh    9 年前

    更新:

    这是一个影响版本的javac错误:6u51、7u21、8。在这里报告并修复了: JDK-8016099 .

    其他相关报告包括: JDK-8022144 JDK-8016636 但它们都被标记为与第一个重复。

    这是固定在1.8.0u65。

        2
  •  0
  •   riddle_me_this He Drunh    9 年前

    TL;博士: 在方法之前声明计算的静态字符串作为解决方法。

    我能够以一种相当不正统的方式清除警告 可能是一个bug -或者一些可笑的“特征”:)。

    下面的示例描述了这种行为。每个都使用 @SuppressWarnings 注释。

    如果我使用(a)中的求值字符串,则不会显示任何警告。 如果我在方法调用之前声明String,如(b)所示,则不会显示任何警告。

    使字符串成为同一类中的私有成员没有效果,仍然会产生编译器警告(b)。

    some examples

    如果我们首先计算常数,它不会产生警告,如(d)所示:

    workaround