[英]Generic class E with type parameter to be a subclass of 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感到困惑,它实际上扩展了什么。
好吧,选项1实际上使用了原始类型。
您将E
定义为具有参数T
,因此E
是参数化类型。 如果定义T
来扩展E
,则还必须指定E
的类型参数,否则E
是原始类型。
因此,唯一的“有效” 1选项是选项2:
class E<T extends E<T>>
Enum
类是递归类型参数的众所周知的示例。 请参阅Java Enum定义 。
1从技术上讲,第一种选择在语法上正确的意义上也是有效的。 但是原始类型仅用于向后兼容。 新代码绝不能包含原始类型。 另请参阅什么是原始类型,为什么我们不应该使用它? 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.