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

  • 相关阅读:
    WebService是什么?以及工作原理
    分布锁的问题?
    反射是什么?原理?作用?
    HTTP/1.1与HTTP/1.0的区别
    Ajax的跨域问题(包括解决方案)?
    SVN与Git优缺点比较
    类的加载过程?
    B树, B-树,B+树,和B*树的区别
    Linux常用的50个命令
    权限模型
  • 原文地址:https://www.cnblogs.com/79home/p/2501699.html
Copyright © 2011-2022 走看看