繁体   English   中英

类型参数为E的子类的泛型E

[英]Generic class E with type parameter to be a subclass of E

我对Java中的泛型概念还比较陌生,我无法分辨这两个答案之间的区别。

手头的问题是:
假设我们有一个通用类E,并且我们希望类型参数EE 换句话说,仅当类FE或从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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM