你所不知道的泛型

一、为什么要有泛型

//没有泛型之前存在的问题
List list = new ArrayList();
//需求:存入学生成绩
list.add(34);
list.add(23);
//问题一:类型不安全,可以存入其他类型的数据
list.add("Tom");

for(Object score : list){
    //问题二:类型转换异常
    int num = (int)score;
}

二、在集合中使用泛型

  1. 集合接口或者集合类在JDK5之后都修改为了带泛型的结构
  2. 在实例化集合类是,可以指定具体的泛型类型
  3. 泛型的类型必须类,不能是基本数据类型
  4. 如果实例化是没有指定具体的泛型,默认为Object
    @Test
    public void test2(){
        ArrayList<Integer> list = new ArrayList<>();
        list.add(34);
        list.add(34);
        list.add(34);
        //解决问题一:避免编译时添加不同类型的数据
        //list.add("Tom");
        Iterator<Integer> iterator = list.iterator();
        while (iterator.hasNext()){
            //避免问题二:类型转换异常
            int scaore = iterator.next();
            System.out.println(scaore);
        }
    }

三、自定义泛型结构

1、自定义泛型类

public Person<T>{
    T name;
    
    public Person(T name){
        this.name = name;
    }
    
    public void setName(T name){
        this.name = name;
    }
    public T getName(){
        return name;
    }
}

//如果定义了泛型类,在实例化对象时没有使用,则默认是Object
Person p = new Person();

//建议在实例化对象时,指定泛型的类型
Person<String> p1 = new Person<>();

四、泛型在继承上的体现

虽然类A是类B的父类,但是 G<A> 和 G<B> 不具备子父类关系,二者是并列关系
    
List<String> list1 = new ArrayList<>();
List<Object> list2 = new ArrayList<>();

//编译不通过
list1 = list2;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值