如何避免:“类型 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());
我有这个代码:
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());