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);
         }
    }
  • 相关阅读:
    内存泄漏 Memory Leaks 内存优化 MD
    Handler Thread 内部类引起内存泄露分析
    为什么不取消注册BroadcastReceiver会导致内存泄漏
    WebChromeClient 简介 API 案例
    WebViewClient 简介 API 案例
    java.net.URI 简介 文档 API
    android.net.Uri 简介 API
    RV 多样式 MultiType 聊天界面 消息类型 MD
    JS函数声明与定义,作用域,函数声明与表达式的区别
    CSS中table tr:nth-child(even)改变tr背景颜色: IE7,8无效
  • 原文地址:https://www.cnblogs.com/lzxl/p/4312902.html
Copyright © 2011-2022 走看看