什么是参数化类型(泛型)
泛型(参数化类型)就是一个编译器可以自动定制作用于特定类型上的类。
这句话来自于《Thinking in Java》 看起来有些生涩难懂,那么我们用Java来实现一下,再来解释。
在Java中。一对尖括号,中间包含类型信息。通过这些特征就可以识别对泛型的使用。
class Shape{
}
ArrayList<Shape> shapes = new ArrayList<Shape>();
一旦我们对 ArrayList 这个容器 这样定义,那么这个ArrayList只能存放 Shape 类。
我们再来解释一下泛型存在的原因,JDK1.5之前,所有的容器,存储的类型都是Java中的通用类型: Object。由于Java的单根继承性,所以所有的东西都是Object类型。
所以,可以存储Object的容器,可以存储任何东西。这样可以使容器很容易被复用,那么新的问题来了。
所有的对象存放在这个容器中,都必须被转型成Object类(向上转型),因此会丢失自己的身份,也就是丢失自己的特性。那么我们在获取这个对象的时候,就会再向下转型一次。
首先,向上转型是安全的,因为子类一定继承于父类,但是向下转型是不够安全的,例如,Object是父类,子类有Circle和Rectangle。但是向下转型时,系统无法区分存放在容器的Object类,是Circle还是Rectangle。所以,除非确切知道所要处理的对象类型,否则向下转型几乎是不安全的。
我们来写一个例子。
class Apple{
//苹果类
private static int size; //数量
private final int id = size++;
public int getId(){
return id;
}
}
class banana{
//香蕉类
}
class test{
public static void main(Stri