java泛型解析01

来源:互联网 发布:剑三捏脸数据成男杨洋 编辑:程序博客网 时间:2024/06/12 20:06

昨天写了一些东西,可是一发布就没有了!!!

 

今天不决定重新写了,从最关键的地方入手!!

 

/**
 * @(#)Generics.java
 *
 *
 * @author
 * @version 1.00 2008/9/27
 */
class Book{
 static int id;
 Book(){System.out.println("Book "+id++);}
 }
class EnglishBook extends Book{}
class ChineseBook extends Book{}
class ChineseHistory extends ChineseBook{}
class Generics2<T>{
 private T a;
    public Generics2(T a) {
     this.a=a;
    }
    public void set(T a){this.a=a;}
    public T get(){return a;}
 }

public class Generics<T> {
private T a;
    public Generics(T a) {
     this.a=a;
    }
    public void set(T a){this.a=a;}
    public T get(){return a;}
    public static void main (String[] args) {
     Generics<EnglishBook> b=new Generics<EnglishBook>(new EnglishBook());
     Generics<Integer> b2=new Generics<Integer>(new Integer(47));
     Class c=b.getClass();
     Class c2=b2.getClass();
     System.out.println(c==c2);
     System.out.println(c);
     System.out.println(c2);
}
   
   
}

 

--------------------Configuration: <Default>--------------------
Book 0
true
class Generics
class Generics

Process completed.

 

可以看到无论是Generics<EnglishBook>还是Generics<Integer>的Class都被输出为他们的原生类型Generics,也就是说编译器并不区分Generics<EnglishBook>和Generics<Integer>!!!那么EnglishBook 和Integer的信息到底到哪里去了呢??

 

 

这主要的原因是java的泛型使用了擦除机制!!

 

可是他们被擦除到什么程度呢??很显然,只能是Object,否则他们怎么能够说他们是相同的呢??正如EnglishBook和Integer一样,他们唯一的共同点就是他们都是Object!!这是唯一可以的假设,也是正确的结论!!!

 

 

 

 

 

 

原创粉丝点击