泛型的学习

泛型深入

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

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

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

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

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

相关推荐
2401_8345170712 小时前
AD学习笔记-35 多层线路和装配图的导出
笔记·学习
嗷嗷哦润橘_12 小时前
AI Agent学习:MetaGPT项目之RAG
人工智能·python·学习·算法·deepseek
Radan小哥12 小时前
Docker学习笔记—day012
笔记·学习·docker
Gavin在路上13 小时前
AI学习之Anthropic的访谈者工具
人工智能·学习
AA陈超14 小时前
LyraStarterGame_5.6 Experience系统加载流程详细实现
c++·笔记·学习·ue5·虚幻引擎·lyra
秋深枫叶红14 小时前
嵌入式第三十四篇——linux系统编程——进程
linux·服务器·数据库·学习
d111111111d15 小时前
STM32得中断服务函数,为什么不能有返回值
笔记·stm32·单片机·嵌入式硬件·学习
阿蒙Amon15 小时前
JavaScript学习笔记:12.类
javascript·笔记·学习
光影少年15 小时前
PostgreSQL数据库学习路线
数据库·学习·postgresql
wjykp15 小时前
part 3神经网络的学习
人工智能·神经网络·学习