泛型的学习

泛型深入

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

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

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

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

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

相关推荐
爱倒腾的老唐4 小时前
0、元器件——电阻
学习
sunshine22 girl5 小时前
Java学习七 Java 项目实战2-注册业务
java·学习
sunshine22 girl7 小时前
Java学习七 Java 项目实战1-项目创建和主页面搭建
java·开发语言·学习
传奇开心果编程8 小时前
【SwiftUI提高练中学】第8课 网络层架构:拦截器、重试、缓存与离线优先
学习·macos·ui·ios·swiftui
一条破秋裤8 小时前
内核驱动的意义与课程学习规划
学习
Bug收容所8 小时前
学习LangChain day1
学习·langchain·llm·agent
传奇开心果编程8 小时前
【现代声明式UI学与练】第7课 组件通信——父传子、子传父、跨层级通信、状态提升与 Context
学习·flutter·react native·ui·swiftui·android jetpack
我命由我1234510 小时前
Photoshop - Photoshop 矢量蒙版
学习·职场和发展·产品运营·求职招聘·职场发展·产品经理·photoshop
熊猫钓鱼>_>11 小时前
越顺,越空:当 AI 把学习 “优化“ 到消失
人工智能·学习·ai·llm·agent·ai编程·metaai
一条破秋裤11 小时前
02_注册设备号_从主次设备号到成对注销
学习