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);
         }
    }
  • 相关阅读:
    Hibernate系列教材 (五)- 基础
    Hibernate系列教材 (四)- 基础
    Hibernate系列教材 (三)- 基础
    Hibernate系列教材 (二)- 基础
    Hibernate系列教材 (一)- 基础
    Spring系列教材 (六)- 注解方式测试
    LDU20级新生排位赛第三场
    POJ3678——Katu Puzzle(2-SAT)
    进阶指南图论——闇の連鎖 I. 黑暗的锁链(树上差分+LCA)
    2021年度训练联盟热身训练赛第一场——Early Orders(单调栈)
  • 原文地址:https://www.cnblogs.com/lzxl/p/4312902.html
Copyright © 2011-2022 走看看