有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

眼前的问题是:
假设我们有一个泛型类E,我们希望类型参数EE的子类。换句话说,只有当类FE或继承自E时,我们才允许E<F>

我已将选择范围缩小到可能的范围

1. class E<T extends E>
2. class E<T extends E<T>>.

我相信选项1符合问题的规格。 然而,我对选项2感到困惑,它实际上扩展了什么


共 (1) 个答案

  1. # 1 楼答案

    选项1实际上使用了原始类型

    您将E定义为具有参数T,因此E是参数化类型。如果定义T以扩展E,则还必须指定E的类型参数,否则E是原始类型

    因此,唯一的“有效”选项是选项2:

    class E<T extends E<T>>
    

    Enum类是递归类型参数的一个著名示例。见Java Enum definition


    1从技术上讲,第一个选项在语法正确的意义上也是有效的。但是原始类型只是为了向后兼容。新代码不应包含原始类型。另见What is a raw type and why shouldn't we use it?