`
李灵晖-raylee
  • 浏览: 128201 次
博客专栏
Group-logo
从头认识java
浏览量:0
文章分类
社区版块
存档分类
最新评论

从头认识java-13.1 泛型与容器(容器的演变)

 
阅读更多

这一章节我们来讨论一下泛型与容器,准确来说是由于容器的需求而产生泛型的需求。

我们平常在编程的时候,大部分都是用了容器来装载对象,我们来看一下容器的演变。

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.泛型的核心概念

就是我告诉编译器我想使用什么类型的容器,然后编译器就会根据需要处理一些细节(例如:类型检测)


总结:这一章节主要讲述容器的演变,以及泛型与容器的关系。


这一章节就到这里,谢谢。

-----------------------------------

目录




分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics