gpt4 book ai didi

java - 为什么 compareTo 在 Java 中的 Enum final 上?

转载 作者:IT老高 更新时间:2023-10-28 11:39:15 30 4
gpt4 key购买 nike

Java 中的枚举实现了 Comparable 接口(interface)。重写 ComparablecompareTo 方法会很好,但这里它被标记为 final。 EnumcompareTo 的默认自然顺序是列出的顺序。

有人知道为什么 Java 枚举有这个限制吗?

最佳答案

为了保持一致性,我猜...当你看到 enum类型,您知道事实上它的自然顺序是声明常量的顺序。

要解决此问题,您可以轻松创建自己的 Comparator<MyEnum>并在您需要不同的顺序时使用它:

enum MyEnum
{
DOG("woof"),
CAT("meow");

String sound;
MyEnum(String s) { sound = s; }
}

class MyEnumComparator implements Comparator<MyEnum>
{
public int compare(MyEnum o1, MyEnum o2)
{
return -o1.compareTo(o2); // this flips the order
return o1.sound.length() - o2.sound.length(); // this compares length
}
}

您可以使用 Comparator直接:

MyEnumComparator c = new MyEnumComparator();
int order = c.compare(MyEnum.CAT, MyEnum.DOG);

或在集合或数组中使用它:

NavigableSet<MyEnum> set = new TreeSet<MyEnum>(c);
MyEnum[] array = MyEnum.values();
Arrays.sort(array, c);

更多信息:

关于java - 为什么 compareTo 在 Java 中的 Enum final 上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/519788/

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