如何避免:“类型 List 的表达式需要未经检查的转换才能符合……”

How to avoid : " The expression of type List needs unchecked conversion to conform to.."

我有这个代码:

List<Book> bookList = session.createCriteria(Book.class)
                .add(Restrictions.like("name", "%i%")).list();

但是,我有一条通知说: "Type safety: The expression of type List needs unchecked conversion to conform to List"

我怎样才能修复我的代码以删除此警告?

将其添加到行上方或方法顶部 header:

@SuppressWarnings("unchecked")
List<Book> bookList = session.createCriteria(Book.class)
            .add(Restrictions.like("name", "%i%")).list();

或整个方法:

@SuppressWarnings("unchecked")
public void doSomething(){

如果 list() 是您自己的实现,您可以这样定义结果:

private List<Book> list(){
    return new ArrayList<Book>();
  }

那么 annotation 就不是必需的了,你有一个由编译器控制的 checked conversion

我修复了这个问题,添加了一个方法来转换列表。

首先将此方法添加到您的 class:

public static <T> List<T> castList(Class<? extends T> clazz, Collection<?> c) {
    List<T> r = new ArrayList<T>(c.size());
    for(Object o: c)
      r.add(clazz.cast(o));
    return r;
}

然后试试这个:

List<Book> bookList = castList(Book.class,
    session.createCriteria(Book.class).add(Restrictions.like("name", "%i%")).list());