比较枚举

Comparing ENUMS

我正在尝试编写一些关于农场的代码。农场有不同类型的动物,被描述为枚举。我想写一个比较器来比较动物并判断哪个更大。如果这两者没有可以比较的参数,我怎么能手动告诉他牛比狗大呢?例如。没有Cow.size=10,Dog.size=2,所以如果我们比较大小,我们会得到更大的。我只有 ENUMS,我想告诉我的比较器,如果它比较一头牛和一只狗,那头牛更大。我在网上看到 Comparable 接口对此非常有用,但我不明白,我怎么能在我的案例中实现它。

提前致谢。

有几件事你可以做,我给两个选项。

选项 1

利用 EnumimplementationComparable 的优势。

The natural order implemented by this method is the order in which the constants are declared.

这意味着您可以声明从最小动物到最大动物的每个常量。然后你会记录 compareTo 不仅对应于声明顺序,还对应于每个常量所代表的动物的大小。

选项 2

为每个常量分配一个"size"。例如,如果大小是 int:

public enum Animal {
    CAT(0),
    COW(2),
    DOG(1),
    ELEPHANT(3);

    public static Comparator<Animal> getSizeComparator() {
        return Comparator.comparingInt(Animal::getSize);
    }

    private final int size;

    Animal(final int size) {
        this.size = size;
    }

    public int getSize() {
        return size;
    }

}

然后您将使用 getSize()1 比较 Animal 的大小(因为 getSizeComparator() 返回的 Comparator做)。如果您将来可能添加更多常量,您应该记录 getSize() 返回的值仅相对于其他 Animal 有用。换句话说,getSize() 实际 值没有任何意义,不应依赖。


1.您不能覆盖 EnumcompareTo 方法,因为它被声明为最终方法。