zoukankan      html  css  js  c++  java
  • 一句话学习法(泛型)

    泛型: 

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

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

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

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

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

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

        声明泛型类对象时如不指定类型,会出现不安全的警告信息,此时所有的类型统一使用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"标识泛型的使用       

       

  • 相关阅读:
    【题解】P2262 [HNOI2004]FTP服务器
    关于大模拟
    CodeForces 666E Forensic Examination
    Bzoj3233 [Ahoi2013]找硬币
    Bzoj4350 括号序列再战猪猪侠
    UOJ#31 【UR #2】猪猪侠再战括号序列
    UOJ#21 【UR #1】缩进优化
    51nod1667 概率好题
    [CodeChef
    51nod1245 Binomial Coefficients Revenge
  • 原文地址:https://www.cnblogs.com/huhewei/p/13157276.html
Copyright © 2011-2022 走看看