zoukankan      html  css  js  c++  java
  • java泛型简记

    java泛型是用擦出实现的,即在编译时把类型信息变为object,然后运行是再动态确定类型信息

     1 //简单的泛型
     2 class Test<T>
     3 {
     4   private T e;
     5   public void set(T e){
     6     this.e = e;
     7   }
     8   public void print(){
     9      System.out.println(e);
    10   }
    11 }

    反编译后:

     1 class Test
     2 {
     3 
     4     Test()
     5     {
     6     }
     7 
     8     public void set(Object obj)
     9     {
    10         e = obj;
    11     }
    12 
    13     public void print()
    14     {
    15         System.out.println(e);
    16     }
    17 
    18     private Object e;
    19 }

    可见,编译器只是简单把类型信息T变为了Object,利用这一点我们可用反射机制突破编译器的限制

    如:

     1 class Main 
     2 {
     3     
     4     @SuppressWarnings("unchecked")
     5     public static void main(String[] args) throws Exception
     6     {
     7       //这里把类型参数设为String
     8       Test<String> t = new Test<String>();
     9       //通过反射把Integer对象赋给成员变量e
    10       t.getClass().getMethod("set",Object.class).invoke(t,new Integer(1));
    11       t.print();
    12     }
    13 }
    14 
    15 class Test<T>
    16 {
    17   private T e;
    18   public void set(T e){
    19     this.e = e;
    20   }
    21   public void print(){
    22      System.out.println(e);
    23   }
    24 }

    运行结果:1

  • 相关阅读:
    Redis篇
    MySql篇
    Tomcat篇
    JDK篇
    冒泡排序(算法源码)
    堆排序(源码)
    快速排序(递归及非递归算法源码)
    MongoDB 复制
    MongoDB appendix
    服务器端脚本
  • 原文地址:https://www.cnblogs.com/79home/p/2501699.html
Copyright © 2011-2022 走看看