泛型(generic)
为什么要引进泛型?设想这样一种情况,你想设计一个容器类(container)来处理数据,比如你想设计一个通用的List类。为了通用,你可以回想到使用面向对象语言的多态这个特性。以add方法为例,你将有两种可能的实现方法:
1,使用继承来实现多态。在定义函数是,形参是一个父类。那么当你以后使用这个方法时,其所有的子类都可以被传递进来。如:
add(Super a);
那么将来使用这个list容器的时候,你就可以用其来处理a及其所有子类了。
但是这样的限制使得你的这个container还是不够通用。
2,使用interface,在定义方法是形参是一个interface,当你以后要使用这个类时,你只需要实现这个interface。使用interface比继承显得更通用了,但是还是不够用。
看到这里时你会想,如果直接在将形参定义为Object,那么不是所有的类都可以传进来了么?这是一种方法,但是这种方法有很多的问题。
假如我们的add方法是这样定义的void add(Object o)。
那么没问题,因为所有的类都是object 的子类,调用add函数时这些类会自动upcast成object类。
单当我们取出一个元素(element)时,我们必须把它downcast到它真实的类。第一个不好的因素是我们必须手动的实现类型转化;第二,我们必须知道得到的这个类究竟是什么类,downcast错时,会报runtime exception。In a word,downcasting and the runtime checks require extra time for the running program and extra effort from the programmer。
java 在1.5开始引进了泛型(generic)
额,由于时间关系没时间继续好好写了(要复习其他东西了)。
写点简要的东西:
定义一个泛型就是在类后面加上<T>(两个为<A,B>,一次类推),以后T就可以在你类中作为一个类型了。
下个贴额连接,有时间再看
Downcasting and the runtime checks require extra time for the running program and extra effort from the programmer.