Java高级——泛型

泛型一、为什么要有泛型?1.1 泛型1.2 问题一——类型不安全1.2 问题二——强转时可能出现报错1.3 引出泛型二、在集合中使用泛型2.1 在ArrayList中使用泛型2.2 在HashMap中使用泛型总结三、自定义泛型结构3.1自定义泛型类3.2自定义泛型方法四、泛型在继承上的体现五、通配符的使用六、泛型应用举例一、为什么要有泛型?1.1 泛型可以理解为生活中的标签把元素的类型设计成一个参数,这个参数就是泛型所谓泛型,就是允许在定义类、接口时通过一个标识符表示类中某个属性的类型或者是某个
摘要由CSDN通过智能技术生成

一、为什么要有泛型?

1.1 泛型

可以理解为生活中的标签
把元素的类型设计成一个参数,这个参数就是泛型

所谓泛型,就是允许在定义类、接口时通过一个标识符表示类中某个属性的类型或者是某个方法的返回值及参数类型。这个类型参数将在使用时(例如,继承或实现这个接口,用这个类型声明变量、创建对象时)确定(即传入实际的类型参数,也称为类型实参)

1.2 问题一——类型不安全

    public void test(){
   
        ArrayList list = new ArrayList();

        //需求存放学生成绩
        list.add(78);
        list.add(45);
        list.add(97);
        list.add(46);
        list.add(54);

        //问题一:类型不安全
        list.add("Tom");

        for(Object obj : list){
   
            System.out.println(obj);
        }
    }

输出:

78
45
97
46
54
Tom

说明:可以看见,在添加数据的时候,可能会误放其他类型的元素,此时没有使用泛型,不仅在编译的时候不会报错,在允许的时候也不会报错

1.2 问题二——强转时可能出现报错

出现java.lang.ClassCastException报错信息

        for(Object obj : list){
   
            //问题二:强转时,可能出现ClassCastException
            int score = (int) obj;
            System.out.println(score);
        }

输出:

78
45
97
46
54

java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer

1.3 引出泛型

上述代码之所以没有达到我么的预期效果,是因为在添加数据时,错误地添加了不安全数据,
由此我们想避免当前list混入其他类型的变量,
我们就需要在添加时,进行**类型检查**,即在集合中使用**泛型**。

二、在集合中使用泛型

在集合中使用泛型以后,如果不小心添加了错误数据,编译不通过
在这里插入图片描述

2.1 在ArrayList中使用泛型

    //在集合中使用泛型的情况
    @Test
    public void test2(){
   
        ArrayList<Integer> list = new ArrayList<>();

        list.add(98);
        list.add(67);
        list.add(54);
        list.add(23);

        //编译时就会进行类型检查,保证数据的安全
        //list.add("String");


        //遍历方式一:
        for (Integer i : list){
   
            //避免了强转操作
            int score = i;
            System.out.println(score);
        }


        //遍历方式二:
        Iterator<Integer> iterator = list.iterator();
        while (iterator.hasNext()){
   
            int score = iterator.next();
            System.out.println(score);
        }
    }

输出:

98
67
54
23
98
67
54
23

2.2 在HashMap中使用泛型

    //在HashMap中使用泛型
    @Test
    public void test3(){
   
        Map<String,Integer> map = new HashMap<String,Integer>();


        map.put("AA",1);
        map.put("DA",342);
        map.put("DS",432);
        map.put("CC",556);
        map.put("BB",8)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值