Java基础部分高级——泛型

本文详细探讨了Java中的泛型,包括引入泛型的原因,如何在集合中使用泛型以提高安全性并避免类型转换,自定义泛型类和方法的实践,以及泛型在继承中的体现和通配符的灵活应用。
摘要由CSDN通过智能技术生成

泛型

泛型:标签

如生活中中药店,每个抽屉外面贴着标签

在这里插入图片描述

为什么要有泛型

  1. 解决元素存储的安全性问题,好比商品、药品标签,不会弄错
  2. 解决获取数据元素时,需要类型强制转换的问题,好比不用每回拿商品、药 品都要辨别。

在这里插入图片描述

在这里插入图片描述

Jdk1.5改写了集合框架中的全部接口和类,为这些接口,类增加了泛型,从而可以在声明集合变量,创建集合对象时传入泛型实参。

在集合中使用泛型

1.集合接口或集合类在jdk 5.0时都修改为带泛型的结构

2.在实例化集合类时,可以指明具体的泛型类型

3.指明完以后,内部结构(比如:方法,构造器,属性等)使用泛型的位置,都指定为实例化的泛型类型。

4.注意点:泛型的类型必须是类(如Integer,String等),不能是基本数据类型。需要用到基本数据类型的位置,拿包装类替换

如果实例化时,没有指明泛型的类型。默认类型为Object类型

public class GenericTest {
   
    //在集合中使用泛型之前的情况
    @Test
    public void test1(){
   
        //需求:存放学生成绩
        ArrayList list=new ArrayList();
        list.add(35);
        list.add(89);
        list.add(66);
        list.add(90);

        //问题一:类型不安全
        list.add("Tom");   //混进非学生类型的数据

        //增强for循环,遍历输出
        for(Object score:list){
   
            //问题二:强转时,可能出现ClassCastException报错,"Tom"不能转换成Integer
            int stuScore=(Integer) score; //Object类型转换成Integer类型,Integer自动拆箱变成int类型
            System.out.println(stuScore);
        }

    }

    //在集合中使用泛型的情况:以ArrayList为例
    @Test
    public void test2(){
   
        //实例化泛型类,泛型不能是基本数据类型
        ArrayList<Integer> list = new ArrayList<Integer>();
        list.add(89);
        list.add(53);
        list.add(79);
        list.add(35);
        //编译时,就会进行类型检查,保证数据安全
//        list.add("TOm");

        //方式一:
//        for (Integer score:list){
   
        //避免了类型强制转换
//            int stuscore=score;
//            System.out.println(stuscore);
//        }

        //方式二:
        //迭代器
        Iterator<Integer> iterator = list.iterator();
        while(iterator.hasNext()){
   
            int stuscore=iterator.next();
            System.out.println(stuscore);
        }

    }

    //在集合中使用泛型的情况,以HashMap为例
    @Test
    public void test3(){
   
//        Map<String,Integer> map=new HashMap<String,Integer>();
        //jdk 7 新特性:类型推断
        Map<String,Integer> map=new HashMap<>();
        map.put("Tom",89);
        map.put("Jerry",89);
        map.put("jack",43);

        //泛型嵌套
        Set<Map.Entry<String,Integer>> entry=map.entrySet(); //Entry接口是Map接口的内部接口
        Iterator<Map.Entry<String,Integer>> iterator=entry.iterator();

        while(iterator.hasNext()){
   
            Map.Entry<String,Integer> e=iterator.next();
            String key=e
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

保持精力旺盛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值