考虑代码:
public List<Products> listProducts(){
...
return (List<Products>) query.list(); // returning a list containing Products objects
}
在方法返回类型中使用泛型始终是首选:
public List<Products> listProducts(){
...
}
1)但返回语句中使用泛型是更好吗?
为:
return (List<Products>) query.list();
2)在return语句中使用简单的 List 是否有任何危害:
return (List) query.list();
答案 0 :(得分:6)
不会有任何问题,禁止一些关于原始类型的编译器警告。如果底层类型不一致,可能会发生一些有趣的事情。假设这种情况:
public static ArrayList<String> foo() {
ArrayList<String> arrlist = new ArrayList<String>();
arrlist.add("asdf");
return arrlist;
}
public static List<Integer> bar() {
return (List)foo();
}
public static void main(String[] args) {
List<Integer> list = bar();
System.out.println(list.get(0).doubleValue());
}
运行时异常中的结果:
线程“main”中的异常java.lang.ClassCastException: java.lang.String无法强制转换为java.lang.Integer at test.Test.main(Test.java:13)
现在,如果你使用了:
public static List<Integer> bar() {
return (List<Integer>)foo();
}
编译器会抱怨:
Type mismatch: cannot convert from ArrayList<String> to List<Integer>
结论:使用泛型总是一个好主意,因为它可以为您节省一些运行时的麻烦。