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

标签 java enums comparable compareto

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/

相关文章:

c++ - 编译时枚举字符串整数对

java - 比较compareTo函数

java - 扩展类并在通用 java 数据结构中进行比较

java - 如何在 JAVA 中为 WSDL 中定义的 REST 生成 RESTful 客户端

java - 使用 <c :when> with an enumeration

java - DynamoDB 查询和分区键,简单的问题

Java 枚举返回 Int

java - 如何实现实现 Collections 的模板化类

java - 如何使用 jSTL 代码进行迭代

java - 如何测试字符串之外的内容?