2014-10-11 65 views
-2

我是Java初學者。即使經過長時間的嘗試,我也無法理解這些線條。在ArrayList的泛型參數中傳入的類名稱

private ArrayList <Lot> lots; 
lots = new ArrayList<Lot>(); 

任何人都可以描述當一個類名被傳遞給ArrayList<>參數這是如何工作的?

+0

Google for「Java generics tutorial」 – 2014-10-11 13:07:12

+0

如果你是初學者,你應該繼續閱讀你的教科書;這將被覆蓋。 (僅供參考,這是* generics *的語法:http://docs.oracle.com/javase/tutorial/java/generics/why.html)。 – 2014-10-11 13:07:53

回答

1

Here

沒有泛型下面的代碼片段需要鑄造:

List list = new ArrayList(); 
list.add("hello"); 
String s = (String) list.get(0); 

當重新編寫使用泛型,代碼不需要鑄造:

List<String> list = new ArrayList<String>(); 
list.add("hello"); 
String s = list.get(0); // no cast 
1

這些是在Java 5中引入的功能generics

簡而言之,這意味着在lots每一個元素是一個Lot - 你不能添加Integer S或String s到它,只要你get從列表中的元素你會得到一個Lot實例,所以你可以做這樣的事情: lots.get(0).someMethodOfLot();

1

當你做ArrayList <Lot> lots= new ArrayList<Lot>(); 它只是意味着你正在創建一個ArrayList,它可以包含一個Lot類型的對象。

如果您嘗試添加任何其他類型的元素到此列表中,它會給您編譯時錯誤。它有助於在編譯時檢測錯誤並使代碼安全。

該功能由泛型提供。現在的問題是爲什麼我們需要泛型。

  1. 更強的類型檢查在編譯時泛型的用途。 Java編譯器對泛型代碼應用強類型檢查,並在代碼違反類型安全性時發出錯誤。修復編譯時錯誤比修復運行時錯誤要容易得多,這很難找到。
  2. 消除casts.This的示例由Rakesh Kr提供
  3. 啓用更好的代碼重用性,例如實現通用算法。 通過使用泛型,程序員可以實現對不同類型的集合起作用的泛型算法,可以進行定製,並且類型安全且易於閱讀。