“又是一个很酷的主题。”

“惊喜不断降临!今天是我的生日吗?”

“今天,我要给你介绍泛型。泛型是带有参数的类型。在 Java 中,容器类允许你指出其内部对象的类型。”

“声明泛型变量时,我们指出两个(而不是一个)类型:变量类型和它所存储的数据的类型。”

“ArrayList 是一个很好的示例。创建新的 ArrayList 对象时,可以方便地指出将在此列表内存储的值的类型。”

代码 说明
ArrayList<String> list = new ArrayList<String>();
创建名为 list 的 ArrayList 变量。
将 ArrayList 对象分配给该变量。
此列表只能存储 String 对象。
ArrayList list = new ArrayList();
创建名为 list 的 ArrayList 变量。
将 ArrayList 对象分配给该变量。此列表可以存储任意值
ArrayList<Integer> list = new ArrayList<Integer>();
创建名为 list 的 ArrayList 变量。
将 ArrayList 对象分配给该变量。
此列表只能存储 Integerint 值。

“听起来超级有趣。尤其是有关存储任意类型的值这一部分。”

“只是看起来不错。实际上,如果我们在一种方法中将字符串放入 ArrayList,然后在另一种方法中希望它包含数字,那么程序将会崩溃(以错误终止)。”

“我明白了。”

“现在,我们不会创建我们自己的带类型参数的类。我们只使用现有的类。”

“任何类都可以作为类型参数,甚至是我编写的类?”

“是的。除原始类型外的任何类型。所有类型参数都必须从 Object 类继承。”

你的意思是,我不能编写 ArrayList<int>?

“你确实不能编写。但是 Java 开发人员为每种原始类型编写了包装类。这些类继承 Object。看起来如下所示:”

原始类型 列表
int Integer ArrayList<Integer>
double Double ArrayList<Double>
boolean Boolean ArrayList<Boolean>
char Character ArrayList<Character>
byte Byte ArrayList<Byte>

“你可以轻松地把原始类和与其相似的类(包装类)分配给彼此:”

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

Character c = 'c';  //文字 c 是 char 类型
char d = c;
Byte b = (byte) 77;  // 文字 77 是 int 类型
Boolean isOk = true;  // 文字 true 是 boolean 类型
Double d = 1.0d;  // 文字 1.0d 是 double 类型

“很棒。我想我将尝试更多地使用 ArrayList。”