泛型的学习

泛型深入

泛型:可以在编译阶段约束操作的数据类型,并进行检查

泛型的格式:<数据类型>

注意:泛型只能支持引用数据类型

复制代码
//没有泛型的时候,集合如何存储数据

    //如果我们没有给集合指定类型,默认认为所有的数据类型都是Object类
    //此时可以在集合添加任意的数据类型
    //带来一个坏处,我们在获取数据的时候,无法使用他的特有行为
    
    //此时推出了泛型,可以在添加数据的时候,将数据类型统一
    //而且让我们获取数据的时候,也可以进行强转
    
    //1.创建集合
    ArrayList list = new ArrayList<>();

    //2.添加数据
    list.add(123);
    list.add("aaa");
    System.out.println(list);

    //3.遍历集合
    Iterator iterator = list.iterator();
    while (iterator.hasNext()){
        Object next = iterator.next();
        //多态的弊端是无法访问子类的特有功能
        System.out.println(next);
    }
}

泛型的好处

同意数据类型。把运行时期的问题提前到了编译期间,避免了强制类型转换可能出现的异常,因为在编译阶段类型就能确定下来

Java中的泛型都是伪泛型

泛型的细节:

泛型中不能写基本数据类型

指定泛型的具体类型后,传递数据时,可以传入该类类型或者其子类类型

如果不写泛型,类型默认为Object

泛型可以在很多地方进行定义:

类后面 泛型类

当一个类中,某个变量的数据类型不确定时,就可以定义带有泛型的类

复制代码
/*
    当我在编写一个类的时候,不确定类型,那么这个类型就可以定义为泛型类
* */
public class MyGenerics<E> {

    Object[] obj = new Object[10];
    int size;

    /*
    E: 表示不确定的类型,该类型在类名后面定义过
    
    * */
    public boolean add(E e) {
        obj[size] = 0;
        size++;
        return true;
    }

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

    @Override
    public String toString() {
        return Arrays.toString(obj);
    }
}
复制代码
    public static void main(String[] args) {
        MyGenerics<String> list = new MyGenerics<>();
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");
        list.add("ddd");

//        System.out.println(list);

    }

方法上面 泛型方法

方法中形参的类型不确定时,可以使用类名后面定义的泛型<E>

复制代码
public class ListUtil {
    private ListUtil(){}

    //类中定义一个静态方法addAll,用来添加多个集合的元素
    /*
        参数一:集合
        参数二:元素
     */
    
    public static <E> void addAll(ArrayList<E> list,E e,E e2,E e3,E e4){
        list.add(e);
        list.add(e2);
        list.add(e3);
        list.add(e4);
    }
}
复制代码
public class Demo3 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        ListUtil.addAll(list, "a", "b", "c", "d");
        System.out.println(list);
    }
}

接口后面 泛型接口

如何使用?

方式1:实现类给出具体类型

方式2:实现类延续泛型,创建对象时在确定

相关推荐
西岸行者6 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意6 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码6 天前
嵌入式学习路线
学习
毛小茛6 天前
计算机系统概论——校验码
学习
babe小鑫6 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms6 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下6 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。6 天前
2026.2.25监控学习
学习
im_AMBER6 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J6 天前
从“Hello World“ 开始 C++
c语言·c++·学习