我只是好奇,看看我们是否可以拥有两个不同类名相同的类定义,一个是泛型类型,另一个是泛型类型:
class Node {}
和
class Node <T>{}
在同一个文件中或在Java中的同一个包中。
答案 0 :(得分:3)
不,这是不可能的。 Node <T>
,任何 T
在编译时折叠为Node <java.lang.Object>
(这称为类型删除),这与之无法区分Node
。
所以真的Node <T>
和Node
是一样的,你的编译器应该抱怨你的源文件包含一个重复的类。
在这个以及许多其他方面,Java泛型是C ++模板的不良表现,其中可以(通过默认模板参数和模板专业化)。
答案 1 :(得分:1)
所有类型参数信息都从运行时类型系统中删除。向其类询问参数化类型的对象将返回原始类型的类对象(例如,对于声明为List类型的对象的List。结果是,您无法在运行时询问对象是否是实例参数化类型或简单类型。
所以问题的答案是不可能的。
详细了解删除here