首页 > 代码库 > Java重要技术(22)泛型之参数化类型的本质
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)泛型之参数化类型的本质
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。