这一章节我们来讨论一下泛型与容器,准确来说是由于容器的需求而产生泛型的需求。
我们平常在编程的时候,大部分都是用了容器来装载对象,我们来看一下容器的演变。
1.普通容器
package com.ray.ch11;
public class Test {
public static void main(String[] args) {
Holder holder = new Holder(new RealObject());
RealObject realObject = holder.getRealObject();
}
}
class RealObject {
static {
System.out.println("loading object");
}
}
class Holder {
private RealObject realObject;
public Holder(RealObject realObject) {
this.realObject = realObject;
}
public RealObject getRealObject() {
return realObject;
}
}
上面的代码展示了能够装载RealObject这个类型对象的 容器,但是由于只是能够存储单一类型,因此实用性比较差。
2.万能容器
package com.ray.ch11;
public class Test {
public static void main(String[] args) {
Holder holder = new Holder(new RealObject());
RealObject realObject = (RealObject) holder.getObject();
Holder holder2 = new Holder(new RealObject2());
RealObject2 realObject2 = (RealObject2) holder2.getObject();
}
}
class RealObject {
static {
System.out.println("loading object");
}
}
class RealObject2 {
static {
System.out.println("loading object2");
}
}
class Holder {
private Object object;
public Holder(Object object) {
this.object = object;
}
public Object getObject() {
return object;
}
}
我们修改一下上面的代码,把holder装载的类型改成Object,这个时候Holder可以装载任何的类型对象的容器。
虽然上面的容器是万能,但是一般编程的时候是不会用到各种类型的对象,大部分的时候是存储单一类型的对象,而且,在使用的过程中需要强制转换,这个是一个大问题,因为不一定知道需要转换对象的类型,因此,需要引入泛型。
3.泛型容器
package com.ray.ch11;
public class Test {
public static void main(String[] args) {
Holder<RealObject> holder = new Holder<RealObject>(new RealObject());
RealObject realObject = (RealObject) holder.getObject();
Holder<RealObject2> holder2 = new Holder<RealObject2>(new RealObject2());
RealObject2 realObject2 = (RealObject2) holder2.getObject();
}
}
class RealObject {
static {
System.out.println("loading object");
}
}
class RealObject2 {
static {
System.out.println("loading object2");
}
}
class Holder<T> {
private T object;
public Holder(T object) {
this.object = object;
}
public Object getObject() {
return object;
}
}
我们再次修改容器,引入泛型特性,这个时候容器基本满足需求,而且在编译的过程中也可以进行类型检查,保证类型的正确性。
4.泛型的核心概念
就是我告诉编译器我想使用什么类型的容器,然后编译器就会根据需要处理一些细节(例如:类型检测)
总结:这一章节主要讲述容器的演变,以及泛型与容器的关系。
这一章节就到这里,谢谢。
-----------------------------------