泛型的学习

泛型深入

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

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

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

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

    //如果我们没有给集合指定类型,默认认为所有的数据类型都是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:实现类延续泛型,创建对象时在确定

相关推荐
yyyang886 小时前
蓝牙系统整体架构详解
学习·信息与通信
Linux-lucky6 小时前
46-Linux学习之旅之LVS负载均衡与keepalived高可用
linux·运维·学习·ubuntu·负载均衡·lvs
金色光环8 小时前
【DSP学习】C2000_ADC中断_笔记
笔记·学习
Дерек的学习记录8 小时前
Unreal Engine 5:第三人称运动系统和人物动画
开发语言·学习·ue5
zhangrelay8 小时前
mrpt杂乱笔记-26-10-31
笔记·学习
衡石科技9 小时前
让多轮问数保持口径一致:Data Agent 的上下文、偏好与学习开关
人工智能·学习·安全
東隅已逝,桑榆非晚10 小时前
算法2. 双指针法-复写零
c++·笔记·学习·算法
Star(up up up)10 小时前
Docker系列---Docker容器基本命令(新手小白保姆级实操教程)
运维·学习·程序人生·青少年编程·docker·容器·dubbo
无心水11 小时前
22、数学与经济管理(运筹学) 核心考点与学习笔记
人工智能·笔记·学习·架构师·软考·软考架构师·软考系统架构师
小弥儿11 小时前
38K星的开源项目 t3code:给 Claude Code 和 Codex 装一个手机遥控器
学习·智能手机·开源·github