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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java重要技术(22)泛型之参数化类型的本质相关的知识,希望对你有一定的参考价值。

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)泛型之参数化类型的本质的主要内容,如果未能解决你的问题,请参考以下文章

Java重要技术(21)泛型之参数化类型的特点(续)

Java重要技术(24)泛型之使用反射访问参数化类型

Java重要技术(19)泛型之泛型的使用方法

Java重要技术(23)泛型之问号通配符

Java基础 -- 泛型之泛型参数

Java 泛型之 JDK 的底层实现原理