4

考虑代码:

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

1 回答 1

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

导致运行时异常:

线程“主”java.lang.ClassCastException 中的异常:java.lang.String 无法在 test.Test.main(Test.java:13) 处转换​​为 java.lang.Integer

现在,如果您使用的是:

public static List<Integer> bar() {
    return (List<Integer>)foo();
}

编译器会抱怨:

Type mismatch: cannot convert from ArrayList<String> to List<Integer>

结论:使用泛型总是一个好主意,因为它可以为您节省一些运行时的麻烦。

于 2012-09-05T07:08:28.867 回答