什么是泛型

引出问题

在之前的顺序表中,如果定义了一个int类型的顺序表(或这说是数组),就只能存储整数,这样显然是不合适的。
应该让这个类同时存储多种类型的数据,就引出了“泛型”这样的概念

Object类

Object是所有父类的子类,在某种意义上也可以代替泛型进行使用,但是在使用的过程中也会出现一些问题:
例如以下代码使用Object来实现的

public class TestDemo0118_1 {
    //如果刚开始定义的时候不用
    private Object[] data = new Object[10];
    private int size;

    public Object get(int index){
        return data[index];
    }
    
    public void add(Object elem){
        data[size] = elem;
        size++;
    }

    public static void main(String[] args) {
        TestDemo0118_1 test = new TestDemo0118_1();
        //在调用add的时候,相当于是向上转型
        test.add("aaa");
        //调用get的时候,返回的是Object,就得把Object赋值给String,那就是向下转型
        String str = (String) test.get(0);
    }
}

其中可以看到,在主函数调用方法的时候,需要用到向上转型和向下转型,增加了代码的冗杂性,降低了代码的安全性

由此彻底引出泛型

泛型

(其实就是在语法层面对Object进行了一些简单的包装,编译过程帮我们自动加上一些编译器的类型检查,自动完成一些类型转换)


public class TestDemo0118_1<E> {
    private E[] data = (E[])new Object[100];
    private int size;

    public E get(int index){
        return data[index];
    }

    public void add(E elem){
        data[size] = elem;
        size++;
    }

    public static void main(String[] args) {
        TestDemo0118_1<String> test = new TestDemo0118_1<>();
        test.add("aaa");
        String str = test.get(0);
    }
}

以上代码就是使用了泛型,此时在主函数种,实例化对象的时候,才声明了对象是String类型的,这样就避免了向下转型所带来的不安全的问题。
由下面截图可以看出,当实例化对象的时候声明了String类型之后,此时方法的参数自动默认成了String类型
在这里插入图片描述
同时也可以这样

Book是自己创建的类,也可以使用泛型
在这里插入图片描述
总之:泛型就是一个模板,所有类型都可以套用

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值