如何避免:"类型List的表达式需要未经检查的转换以符合.."

时间:2015-11-13 15:38:04

标签: java hibernate list criteria restrictions

我有这段代码:

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

但是,我有一个通知说: &#34;类型安全:List类型的表达式需要未经检查的转换以符合List&#34;

我如何修复我的代码以删除此警告?

2 个答案:

答案 0 :(得分:1)

在行上方或方法标题顶部添加:

@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由编译器控制。

答案 1 :(得分:-1)

我修复了这个添加方法来强制转换List。

首先将此方法添加到您的课程中:

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