2012-09-05 43 views
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) query.list(); 

回答

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中不能轉換爲java.lang.Integer中在 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> 

結論:使用泛型始終是一個好主意,因爲它可以爲你節省一些運行時頭痛。

+0

很好的例子! –