• java范型的理解


    1.概念
    java中类型的参数化,用一个变量来表示某种类型。

    2.引入泛型解决的问题
    <1>在编译期间进行类型检查,避免出现classCastException(类型转换异常)
    <2>避免进行强制类型转换
    <3>避免重复代码的编写,实现复用。

    3.泛型在集合类中的的应用
    对于ArrayList:
    不使用泛型时,此时默认是Object类型:

    public class Test1 {
        public static void main(String[] args) {
            ArrayList a1=new ArrayList();
            a1.add("hll");
            a1.add(1);
            String s=(String)a1.get(0);
            String s2=(String)a1.get(1);//在运行时会出现类型转换异常
    
        }
    
    }
    

    上述代码进行了强制类型转换,且在编译期间不会出现类型转换异常,在运行时会出现类型转换异常
    添加泛型后:

    ArrayList<String> a1=new ArrayList<String>();
            a1.add("hll");
            a1.add(1);//编译时就会报错
            String s=a1.get(0);//不必进行强制类型转换

    4.自定义泛型类

    public class Test1<T extends Comparable> {
    
        public int CompareTo(T a,T b){
            return a.compareTo(b);
    
        }
        public static void main(String[] args) {
            Test1 t=new Test1();
            System.out.println(t.CompareTo(1,3));
    
        }
    
    
    }
    

    类型擦除:在执行的过程中,会去掉泛型的类型,用确定的类型来代替。如上面的比较大小的代码,T最后会用Comparable代替,类型擦除后的代码为:

    public class Test1{
    
        public int CompareTo(Comparable a,Comparable b){
            return a.compareTo(b);
    
        }
        public static void main(String[] args) {
            Test1 t=new Test1();
            System.out.println(t.CompareTo(1,3));
    
        }
    
    
    }

    泛型注意的几点

    1.泛型的类型不能用基本类型代替,例如:
    ArrayList<int> s=new ArrayList<int>();是错误的写法

    2.泛型间父子继承关系,例如
    ArrayList<Object> t=new ArrayList<Integer>();是错误的写法
    泛型定义前后必须统一一致

  • 相关阅读:
    lambda表达式——sort和compare进行高级排序
    guava包的应用总结
    ffmpeg源码编译安装(Compile ffmpeg with source) Part 1 : 通用部分
    Notes : <Hands-on ML with Sklearn & TF> Chapter 4
    Notes : <Hands-on ML with Sklearn & TF> Chapter 3
    scxml-1
    redis
    Async Actions using Coroutines(异步行为使用协程,协同程序)
    Pass additional arguments during initialization and/or construction
    Wraping legacy code
  • 原文地址:https://www.cnblogs.com/wangxiaopei/p/8551196.html
Copyright © 2020-2023  润新知