一句话学习法(泛型)

泛型: 

    主要解决类转换异常问题,或可以将类转换异常错误从运行阶段报告提前到编译阶段报告;

    所有数据类型、参数类型实质均为类;

    泛型类型标识紧跟在类名称后面;

      在泛型的指定中是无法指定基本数据类型的,必须设置成一个类;

    装箱:将基本数据类型转换为类;

    拆箱:将类转换为基本数据类型;

    声明泛型类对象时如不指定类型,会出现不安全的警告信息,此时所有的类型统一使用Object进行接收;

    在引用传递泛型类对象时,泛型类型必须匹配才可以传递:

      1. 如被传递的类型为String,接收的类型为Object,也无法传递;

      2. 接收处省略泛型,则可以传递,因为上一条的Objectt 其为狭义的Object(自己理解);

      3. 接收处类型为通配符?,则可以传递(通配符的引出,因此,通配符仅出现在引用传递的接收处,包括受限泛型);

      4. 如果使用?接收泛型对象时,则不能设置被泛型指定的内容,但可以设置null值;

    受限泛型:(T和通配符处均可使用)

      1. public static void fun (Info<? extends Number> temp){  //设置上限

        System.out.print(temp + "、");

         }

      2. public static void fun (Info<? super String> temp){  //设置下限,只能接收String和Object类型

        System.out.print("内容" + temp);

         }

        泛型与之类继承的限制:

    Info<String> i1 = new Info<String> ;

    Info<Object> i2 = null ;

    i2 = i1 ;

      以上编译报错,Info<String>无法转换为Info<Object>。

      虽然String是Object类的子类,但在泛型操作中此概念无效,此时只能使用?接收(理解可参见引用传递);

    泛型接口:

      定义:

        interface Info<T>{

          public T getVar() ;

        }

      实现:

        class InfoImp1<T> implements Info<T>{

          ......

        }

          实例化:

            Info<String> i = null ;  //定义接口对象

            i = new InfoImpl<String> ("李兴华") ;  //通过子类实例化此对象          

        或

        class InfoImp1 implements Info<String>{

          ......

        }

          实例化:

            Info<String> i = null ;  //定义接口对象,指定泛型

            i = new InfoImpl("李兴华") ;  //通过子类实例化此对象,不用指定泛型

       泛型接口在Java类库中大量使用,这样在使用这些接口时为防止安全警告信息的出现,都要指定具体的泛型类型

     泛型方法的定义与其所在的类是否是泛型类是没有任何关系的,方法定义时返回值前的泛型标识不能少;

    通过泛型方法返回泛型类实例,必须在方法的返回类型声明处明确地指定泛型标识:

      public static <T extends Number> Info<T> fun(T param){

        ......

      }

      或

      public static <T> Info<T> fun(T param){

        ......

      }

      等;

    泛型方法与非泛型方法:

      非泛型方法:

        public T fun1(T param){  //T的具体类型由所在的泛型类的泛型标识的具体类型决定;

          ......

        }

       泛型方法:

        public <T> T fun1(T param){  //T的具体类型由调用方法时说设置的参数类型决定;

          ......

        }

     "<T>"标识泛型的定义;"T"标识泛型的使用       

   

原文地址:https://www.cnblogs.com/huhewei/p/13157276.html