• 什么是泛型


    一、什么是泛型

    1.背景:

    JAVA推出泛型以前,程序员可以构建一个元素类型为Object的集合,该集合能够存储任意的数据类型对象,而在使用该集合的过程中,需要程序员明确知道存储每个元素的数据类型,否则很容易引发ClassCastException异常。

    小案例:

    package com.genericity;
    
    import java.util.ArrayList;
    
    /**
     * 泛型产生的背景
     */
    public class MainClass {
        public static void main(String[] args) {
            ArrayList list = new ArrayList<>();
            list.add("丫丫");
            list.add(100);
            list.add(true);
    
            //对数据进行使用
            for (int i = 0; i <list.size() ; i++) {
                //如果我们将获取到的每个元素转换成String类型的时候,会出现类型转换异常ClassCastException
                String str = (String)list.get(i);
                System.out.println(str);
            }
        }
    }
    

      

    package com.genericity;
    
    import java.util.ArrayList;
    
    /**
     * 泛型产生的背景
     */
    public class MainClass {
        public static void main(String[] args) {
            ArrayList list = new ArrayList<>();
            list.add("丫丫");
            list.add(100);
            list.add(true);
            list.add(new Student(1,0,"小丫丫"));
    
            //对数据进行使用
            for (int i = 0; i <list.size() ; i++) {
                System.out.println(list.get(i));
            }
        }
    }
    
    class Student{
        private int stuNo;
        private int stuSex;
        private String stuName;
        public Student(int stuNo,int stuSex,String stuName){
            this.stuNo=stuNo;
            this.stuSex=stuSex;
            this.stuName=stuName;
        }
    
        public int getStuNo() {
            return stuNo;
        }
    
        public void setStuNo(int stuNo) {
            this.stuNo = stuNo;
        }
    
        public int getStuSex() {
            return stuSex;
        }
    
        public void setStuSex(int stuSex) {
            this.stuSex = stuSex;
        }
    
        public String getStuName() {
            return stuName;
        }
    
        public void setStuName(String stuName) {
            this.stuName = stuName;
        }
        //这里我没有重写set和get方法
    }
    

      

    运行结果:

    丫丫

    100

    true

    com.genericity.Student@4dc63996

    我们能够看到,实体类我们在使用的时候,打印出来的是对象的内存地址,如果我们想要使用这个对象,就需要对这个对象进行单独的处理。这里我们需要思考一下,如果我们的list集合中很多个不同的实体类对象,那么我们就要进行很多个不同的单独的处理,这是非常麻烦的。这个时候我们就有必要引入泛型。

    使用泛型的小案例:

    package com.genericity;
    
    import java.util.ArrayList;
    
    public class Test {
        public static void main(String[] args) {
            /**
             * 泛型:提供了编译器功能的类型检查,减少了数据类型转换
             * ArrayList<Integer> strList = new ArrayList<>();
             * strList.add("a");//申明的泛型是Integer类型的,如果我们添加String类型的数据,就会报错
             */
            ArrayList<String> strList = new ArrayList<>();
            strList.add("a");
            strList.add("b");
            strList.add("c");
            for (int i = 0; i < strList.size(); i++) {
                System.out.println(strList.get(i));
            }
    
            System.out.println("===========================");
    
            ArrayList<Integer>  intList= new ArrayList<>();
            intList.add(100);
            intList.add(200);
            intList.add(300);
    
            for (int i = 0; i < intList.size(); i++) {
                int num = intList.get(i);
                System.out.println(num);
            }
        }
    }
    

      

    2.概念:

    Java泛型(generics)是JDK5中引入的一个新特性,泛型提供了编译时类型安全监测机制,该机制允许我们在编译时检测到非法的类型数据结构。泛型的本质就是参数化类型,也就是所操作的数据类型被指定为一个参数。

    3.好处:

    • 类型安全

    • 消除了强制类型的转换

     

  • 相关阅读:
    JVM 规范
    通过jmap查看jvm采用的垃圾收集器
    Nginx做前端Proxy时TIME_WAIT过多的问题
    nginx访问http自动跳转到https
    mysql5.7启动slave报错 ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository
    nginx检查报错 error while loading shared libraries: libprofiler.so.0: cannot open shared object file: No such file or directory
    Nginx+Center OS 7.2 开机启动设置(转载)
    windows下安装pycharm并连接Linux的python环境
    jenkins结合脚本实现代码自动化部署及一键回滚至上一版本
    centos7-安装mysql5.6.36
  • 原文地址:https://www.cnblogs.com/dongyaotou/p/15660987.html
Copyright © 2020-2023  润新知