我们可以在 java 中的同一个文件/包中有两个类定义吗?类节点和类节点<T>



我只是好奇,看看我们是否可以有两个不同的类定义相同的类名,一个有泛型类型,另一个没有泛型类型:

class Node {}

class Node <T>{}

不可能。Node <T>,对于任何 T在编译时坍缩为Node <java.lang.Object>(这称为类型擦除),然后与Node无法区分。

所以实际上Node <T>Node是一样的,你的编译器应该抱怨你的源文件包含一个重复的类。

在这方面,以及其他许多方面,Java泛型是c++模板的可怜的表亲,在c++模板中,上面的是可能的(通过默认模板参数和模板特化)。

Java中的泛型是通过一种叫做擦除的技术实现的。

所有类型参数信息将从运行时类型系统中删除。要求参数化类型的对象为其类返回原始类型的类对象(例如:对于声明为List类型的对象。这样做的后果是,您无法在运行时询问对象是参数化类型的实例还是简单类型的实例。

所以你的问题的答案是不,这是不可能的

在这里阅读更多关于擦除的信息

最新更新