gpt4 book ai didi

java - 如果 Enum 声明没有递归部分,在 Java 中会有什么不同

转载 作者:搜寻专家 更新时间:2023-10-30 19:46:55 24 4
gpt4 key购买 nike

请看 Java Enum definitionWhy in java enum is declared as Enum<E extends Enum<E>>供一般性讨论。在这里我想知道如果 Enum 类被定义为

public class Enum<E extends Enum> 

我正在使用这段代码来测试我的想法:

interface MyComparable<T> {
int myCompare(T o);
}

class MyEnum<E extends MyEnum> implements MyComparable<E> {
public int myCompare(E o) { return -1; }
}

class FirstEnum extends MyEnum<FirstEnum> {}

class SecondEnum extends MyEnum<SecondEnum> {}

在这种情况下,我找不到任何好处。

附言。我不被允许做的事实

class ThirdEnum extends MyEnum<SecondEnum> {}

当 MyEnum 被递归定义时
a) 不相关,因为对于真正的枚举,你不能这样做只是因为你不能自己扩展枚举
b) 不正确——请在编译器中尝试它,看看它实际上能够编译而没有任何错误

PPS。我越来越倾向于相信这里的正确答案是“如果你删除递归部分,什么都不会改变”——但我就是不敢相信。

最佳答案

好吧,首先它会提示使用原始类型,但你可以这样做:

public class Enum<E extends Enum<?>>

同样的效果。

此外,对于这种类型的泛型,您可以执行以下操作:

class FirstEnum extends MyEnum<SecondEnum> {
}

class SecondEnum extends MyEnum<FirstEnum> {
}

在我看来,这可能会导致很多麻烦。更准确地说,你不能将 FirstEnum 类型的枚举与相同类型的枚举进行比较,你必须将它与其他类型的枚举进行比较,如果你有一个 List<FirstEnum> ,这真的很麻烦。你想要排序。如果我设置 E,该示例将无法编译而不是 ?因为 SecondEnum 不是 E extends MyEnum<E> 类型(这会导致循环继承)。如果 FirstEnum extends MyEnum<FirstEnum> 它将起作用虽然(这意味着 SecondEnum 是 FirstEnum 的子类——正常的层次继承)。

关于java - 如果 Enum 声明没有递归部分,在 Java 中会有什么不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3067891/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com