码迷,mamicode.com
首页 > 编程语言 > 详细

Java重要技术(22)泛型之参数化类型的本质

时间:2017-04-07 23:27:34      阅读:284      评论:0      收藏:0      [点我收藏+]

标签:mil   组成   parameter   编译   不同   编译错误   com   []   cal   

1.1. 参数化类型的本质

Java参数化类型相对于C++的参数化类型而言,有本质区别。前者只是编译器的类型检查的一种手段,而后者则是真正的不利于原始类型的新的类型。

 

public class GenericParameterTest3 {

 

static class  Hello{}

static class  World{}

static class  Generic<T>{}

 

public static void main(String[] args) {

 

//三者编译后的类型完全相同。

Generic  g1 = new Generic();

System.out.println("Generic:" +  g1.getClass());

 

Generic<Hello>  g2 = new Generic<Hello>();

System.out.println("Generic<Hello>:" +  g2.getClass());

 

Generic<World>  g3 = new Generic<World>();

System.out.println("Generic<World>:" +  g3.getClass());

 

//g1等于g2, g1等于g3

System.out.println(g1.getClass() == g2.getClass());

System.out.println(g1.getClass() == g3.getClass());

 

//编译错误。

//Generic<Hello>  hello = new Generic<World>();

 

}

 

 

运行后发现,不同的类型参数组成的泛型类型,其class的类型都和原始类型的class的类型完全相同。不论实例化多少个泛型类型,编译后只会产生唯一一个class文件,加载后也只有唯一一个Class对象。

运行结果如下:

Generic:class com.test.javatechnology.genericparameter.GenericParameterTest3$Generic

Generic<Hello>:class com.test.javatechnology.genericparameter.GenericParameterTest3$Generic

Generic<World>:class com.test.javatechnology.genericparameter.GenericParameterTest3$Generic

true

true

Java的参数化类型的上述本质决定了不同类型参数组成的参数化类型之间可以进行强制类型转换。

 

Java重要技术(22)泛型之参数化类型的本质

标签:mil   组成   parameter   编译   不同   编译错误   com   []   cal   

原文地址:http://www.cnblogs.com/coe2coe/p/6680194.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!