我只是好奇,看看我们是否可以有两个不同的类定义相同的类名,一个有泛型类型,另一个没有泛型类型:
class Node {}
和
class Node <T>{}
不可能。Node <T>
,对于任何 T
在编译时坍缩为Node <java.lang.Object>
(这称为类型擦除),然后与Node
无法区分。
所以实际上Node <T>
和Node
是一样的,你的编译器应该抱怨你的源文件包含一个重复的类。
在这方面,以及其他许多方面,Java泛型是c++模板的可怜的表亲,在c++模板中,上面的是可能的(通过默认模板参数和模板特化)。
Java中的泛型是通过一种叫做擦除的技术实现的。
所有类型参数信息将从运行时类型系统中删除。要求参数化类型的对象为其类返回原始类型的类对象(例如:对于声明为List类型的对象。这样做的后果是,您无法在运行时询问对象是参数化类型的实例还是简单类型的实例。
所以你的问题的答案是不,这是不可能的
在这里阅读更多关于擦除的信息