何为泛型
正如字面意思,泛化的类型,指在编码时无法确定某一个具体的类型,需要先使用一个占位符(建议大写,全英),当运行时传入具体的类型来替换这一个泛型标记
为什么需要泛型
伪需求
假设我们需要一个列表去存 String
类型的数据,那这个结构的设计为
class MyListForString{
String get();
void set(Sring int)
}
然后,发现需要里一个列表去存取 Integer
类型的数据,就需要重新定义一个结构
class MyListForInteger{
Integer get();
void set(Integer int)
}
然后,我们需要一个列表存储 xx 类型的数据。。
用 Object 优化
这个需求抽出来,其实就是需要有一个列表结构,然后能够存储一个指定的类型(这个类型又可能会根据需要进行变化),并且需要能正确的取出对应的类型,现在,我们为了应对变化的需求,重复编写差不多的 MyListForXX
根据多态以及向上转型的知识点(不懂的 xdm 可以来看看我准备的前置知识点 Java 三大基础特性の多态),我们可以用 Object
优化为成下面的代码块
class MyList{
Object get();
void set(Object obj)
}
现在已经能做到通用性了,就是用起来,emm,得小心一点
MyList list = new MyList();
list.set(1);
list.set("1");
Integer a = (Integer)list.get(); // 代码中取出来的类型实际是 Object, 我们需要手动强制为存入时的类型
String s = (String)list.get();
正如伪代码演示的这样,我们存入数据的时候,没有限制,但是,取出来的话,就需要小心翼翼了,毕竟谁也不知道 list
中存入了什么类型的数据,或许,我们可以修改实例创建的描述来实现一点点毫无约束力的限制?
MyList listOnlyForInt = new MyList