我有这段代码:
List<Book> bookList = session.createCriteria(Book.class)
.add(Restrictions.like("name", "%i%")).list();
但是,我有一个通知说: &#34;类型安全:List类型的表达式需要未经检查的转换以符合List&#34;
我如何修复我的代码以删除此警告?
答案 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());