“另一個很酷的話題。”

“驚喜不斷!今天是我的生日嗎?”

“今天,我將向您介紹泛型。泛型是具有參數的類型。在 Java 中,容器類讓您指示其內部對象的類型。”

“當我們聲明一個通用變量時,我們指明了兩種類型而不是一種:變量類型和它存儲的數據類型。”

“ArrayList 是一個很好的例子。當我們創建一個新的 ArrayList 對象時,指明將存儲在該列表中的值的類型很方便。”

代碼 解釋
ArrayList<String> list = new ArrayList<String>();
創建一個名為 的 ArrayList 變量list
為其分配一個 ArrayList 對象。
這個列表只能存儲String對象。
ArrayList list = new ArrayList();
創建一個名為 的 ArrayList 變量list
為其分配一個 ArrayList 對象。這個列表可以存儲任何值
ArrayList<Integer> list = new ArrayList<Integer>();
創建一個名為 的 ArrayList 變量list
為其分配一個 ArrayList 對象。
這個列表只能存儲Integerint值。

“聽起來超級有趣。尤其是關於存儲任何類型的值的部分。”

“這似乎只是一件好事。實際上,如果我們在一種方法中將字符串放入 ArrayList,然後期望它在另一種方法中包含數字,程序就會崩潰(因錯誤而終止)。”

“我懂了。”

“現在,我們不會創建自己的帶有類型參數的類。我們只會使用現有的類。”

“任何類都可以是類型參數,即使是我寫的嗎?”

“是的。除了基本類型之外的任何類型。所有類型參數都必須從 Object 類繼承。”

你是說我不會寫 ArrayList<int>?

“事實上,你不能。但是 Java 開發人員已經為每個基本類型編寫了包裝類。這些類繼承了Object。它看起來是這樣的:”

原始類型 班級 列表
整數 整數 ArrayList<整數>
雙倍的 雙倍的 ArrayList<雙精度>
布爾值 布爾值 ArrayList<布爾值>
字符 特點 ArrayList<字符>
字節 字節 ArrayList<字節>

“您可以輕鬆地將原始類及其類似物(包裝類)分配給彼此:”

例子
int a = 5;
Integer b = a;
int c = b;

Character c = 'c';  //the literal c is a char
char d = c;
Byte b = (byte) 77;  // The literal 77 is an int
Boolean isOk = true;  // the literal true is a boolean
Double d = 1.0d;  // The literal 1.0d is a double

“太好了。我想我會嘗試更頻繁地使用 ArrayList。”