参数化类型(Java中叫做泛型)

什么是参数化类型(泛型)

泛型(参数化类型)就是一个编译器可以自动定制作用于特定类型上的类

这句话来自于《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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值