• 泛型的学习


    泛型深入

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

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

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

    //没有泛型的时候,集合如何存储数据
    
        //如果我们没有给集合指定类型,默认认为所有的数据类型都是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 {
    
        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 list = new MyGenerics<>();
            list.add("aaa");
            list.add("bbb");
            list.add("ccc");
            list.add("ddd");
    
    //        System.out.println(list);
    
        }

    方法上面        泛型方法

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

    public class ListUtil {
        private ListUtil(){}
    
        //类中定义一个静态方法addAll,用来添加多个集合的元素
        /*
            参数一:集合
            参数二:元素
         */
        
        public static  void addAll(ArrayList 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 list = new ArrayList<>();
            ListUtil.addAll(list, "a", "b", "c", "d");
            System.out.println(list);
        }
    }
    

    接口后面         泛型接口

    如何使用?

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

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

  • 相关阅读:
    新课程发布 | 如何用 7 分钟击破 Serverless 落地难点?
    MATLAB|不给糖果就捣蛋
    STM32大小端模式测试
    使用MAT分析线上问题实战
    解锁数据潜力:为什么你应该考虑使用向量数据库
    【Mac】VSCode 更新1.73版本后JS&TS代码跳转异常
    Flutter 07 框架和三棵树(Widgets、Elements和RenderObjects)
    CSS基础框盒模型:打造炙手可热的网页布局!
    利用curl测试WSS连接的建立
    “双面”九号公司:小米、顺为资本等减持,高禄峰推高价回购方案
  • 原文地址:https://blog.csdn.net/aaaaadongcn/article/details/132609566