zoukankan      html  css  js  c++  java
  • 五、泛型

    泛型:
         jdk1.5出现的安全机制。
        
    好处:
         1,将运行时期的问题ClassCastException转到了编译时期。
         2,避免了强制转换的麻烦。
     
    类比:数组在创建时就明确了类型,表明数组中的元素只能是指定的类型。集合存的是对象,在jdk1.5之前没有对集合存储的对象进行限定,为了安全就出现了泛型。
        
    <>:什么时候用?当操作的引用数据类型不确定的时候。就使用<>。将要操作的引用数据类型传入即可.
       其实<>就是一个用于接收具体引用数据类型的参数范围。
      
    在程序中,只要用到了带有<>的类或者接口,就要明确传入的具体引用数据类型 。

    泛型技术是给编译器使用的技术,用于编译时期。确保了类型的安全。

    运行时,会将泛型去掉,生成的class文件中是不带泛型的,这个称为泛型的擦除。
    为什么擦除呢?因为为了兼容运行的类加载器。

    泛型的补偿:在运行时,通过获取元素的类型进行转换动作。不用使用者在强制转换了。


    泛型的通配符:? 未知类型。

    泛型的限定:
    ? extends E: 接收E类型或者E的子类型对象。上限
    一般存储对象的时候用。比如 添加元素 addAll.

    ? super E: 接收E类型或者E的父类型对象。 下限。
    一般取出对象的时候用。比如比较器。
     
    1.泛型类
    class Utils<T>
    {
         private T obj;
     
         public void setObject(T obj)
         {
              this.obj = ;obj
         }
     
         public T getObject()
         {
              return obj;
         }
    }
     
    2.泛型方法
    class Demo
    {
         public <T> void show(T t)
         {
              System.out.println("show:" + t);
         }
     
         public <Q> void print(Q q)
         {
              System.out.println("print:" + q);
         }
    }
     

     
    class Demo<T>
    {
         public void show(T t)
         {
              System.out.println("show:" + t);
         }
     
         public <Q> void print(Q q)
         {
              System.out.println("print:" + q);
         }
    }
    //此类中的show方法中的泛型跟随Demo类中的泛型
     

    class Demo<T>
    {
         public void show(T t)
         {
              System.out.println("show:" + t);
         }
     
         public <Q> void print(Q q)
         {
              System.out.println("print:" + q);
         }
     
         public static <W> void method(W w)
         {
              System.out.println("method:" + w);
         }
    }
     
    静态方法泛型:静态方法不可以访问类上定义的泛型。如果静态方法操作的应用数据类型不确定,可以将泛型定义在方法上(格式要正确)。
     
    3.泛型接口
    interface Inter<T>
    {
         void show(T t);
    }

    /*
    class InterImpl implements Inter<String>
    {
         public void show(String t)
         {
              System.out.println("show :"+t);
         }
    }
    */

    class InterImpl<T> implements Inter<T>
    {
         public void show(T t)
         {
              System.out.println("show :"+t);
         }
    }
  • 相关阅读:
    layui 获取select下拉选项上自定义的属性
    TP中关联模型的使用
    安卓模仿直播中的闪动(放大缩小)的动画
    Android报错Multiple dex files define Lcom/ta/utdid2/c/a/c
    Date.parse()的坑
    Android应用加固的简单实现方案(二)
    Android应用加固的简单实现方案
    Android中ANR的触发机制-BroadcastReceiver篇
    Android中ANR的触发机制-Service篇
    Application中以标准模式启动Activity报错的原因分析
  • 原文地址:https://www.cnblogs.com/lzxl/p/4312902.html
Copyright © 2011-2022 走看看