这一章节我们来讨论一下泛型与容器,准确来说是由于容器的需求而产生泛型的需求。
我们平常在编程的时候,大部分都是用了容器来装载对象,我们来看一下容器的演变。
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.泛型的核心概念
就是我告诉编译器我想使用什么类型的容器,然后编译器就会根据需要处理一些细节(例如:类型检测)
总结:这一章节主要讲述容器的演变,以及泛型与容器的关系。
这一章节就到这里,谢谢。
-----------------------------------
目录
分享到:
相关推荐
java --泛型编程 课件 同时可结合《java 程序员教程》这本书
JAVA设计模式--程序设计--反射--注解--泛型
个人制作且上课使用的课件,希望对大家初步了解泛型相关内容有一定的帮助。个人制作且上课使用的课件,希望对大家初步了解泛型相关内容有一定的帮助。
03-Java集合-泛型面试题(24题)-新增
而不是创建一个Object列表,你可以参数化java.util.List来创建一个String String列表,如下所示:当通过反射在运行时检查可参数化类型本
05-java泛型的使用.doc
试用java.util.Stack泛型栈作为父类,用另一个泛型栈对象作为成员变量,模拟实现一个泛型子类Queue,当存储元素的第1个栈的元素超过dump时,再有元素入队列就倒入第2栈。除提供无参构造函数Queue( )外,其它所有队列...
NULL 博文链接:https://840198532-qq-com.iteye.com/blog/1491352
Java 反射与泛型教程 资源为视频教程资源 希望对你的 Java 学习有所帮助。
java基础-泛型通配符
泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java语言引入泛型的好处是...
面向对象程序设计201603-编写泛型函数1
NULL 博文链接:https://840198532-qq-com.iteye.com/blog/1490705
C语言在泛型这一块确实不行,哈,但我就是喜欢泛型啊。 用宏定义做的C语言泛型,提供一个思路给大家。
包含代码,实验案例,课件(泛型的基本概念、泛型的定义和类型参数、泛型类和泛型接口,泛型委托和泛型事件)
本程序利用c语言来实现c++中STL的功能,也就是利用C语言来实现泛型的数据结构,这个文件中只包含四种数据结构,stack,queue,list,vector
大学课程讲义_Java基础_泛型.docx
Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战...
1、Java泛型是J2 SE1.5中引入的一个新特性,其本质是参数化类型,也就是说所操作的数据类型被指定为一个参数(type parameter)这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。...