java泛型类E,类型参数为E的子类
我对Java中的泛型概念比较陌生,我无法区分这两个答案之间的区别
眼前的问题是:
假设我们有一个泛型类E,我们希望类型参数E
是E
的子类。换句话说,只有当类F
是E
或继承自E
时,我们才允许E<F>
我已将选择范围缩小到可能的范围
1. class E<T extends E>
2. class E<T extends E<T>>.
我相信选项1符合问题的规格。 然而,我对选项2感到困惑,它实际上扩展了什么
你可以在下面搜索框中键入要查询的问题!
我对Java中的泛型概念比较陌生,我无法区分这两个答案之间的区别
眼前的问题是:
假设我们有一个泛型类E,我们希望类型参数E
是E
的子类。换句话说,只有当类F
是E
或继承自E
时,我们才允许E<F>
我已将选择范围缩小到可能的范围
1. class E<T extends E>
2. class E<T extends E<T>>.
我相信选项1符合问题的规格。 然而,我对选项2感到困惑,它实际上扩展了什么
# 1 楼答案
选项1实际上使用了原始类型
您将
E
定义为具有参数T
,因此E
是参数化类型。如果定义T
以扩展E
,则还必须指定E
的类型参数,否则E
是原始类型因此,唯一的“有效”选项是选项2:
Enum
类是递归类型参数的一个著名示例。见Java Enum definition1从技术上讲,第一个选项在语法正确的意义上也是有效的。但是原始类型只是为了向后兼容。新代码不应包含原始类型。另见What is a raw type and why shouldn't we use it?