比较枚举
Comparing ENUMS
我正在尝试编写一些关于农场的代码。农场有不同类型的动物,被描述为枚举。我想写一个比较器来比较动物并判断哪个更大。如果这两者没有可以比较的参数,我怎么能手动告诉他牛比狗大呢?例如。没有Cow.size=10,Dog.size=2,所以如果我们比较大小,我们会得到更大的。我只有 ENUMS,我想告诉我的比较器,如果它比较一头牛和一只狗,那头牛更大。我在网上看到 Comparable 接口对此非常有用,但我不明白,我怎么能在我的案例中实现它。
提前致谢。
有几件事你可以做,我给两个选项。
选项 1
利用 Enum
的 implementation 或 Comparable
的优势。
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.您不能覆盖 Enum
的 compareTo
方法,因为它被声明为最终方法。
我正在尝试编写一些关于农场的代码。农场有不同类型的动物,被描述为枚举。我想写一个比较器来比较动物并判断哪个更大。如果这两者没有可以比较的参数,我怎么能手动告诉他牛比狗大呢?例如。没有Cow.size=10,Dog.size=2,所以如果我们比较大小,我们会得到更大的。我只有 ENUMS,我想告诉我的比较器,如果它比较一头牛和一只狗,那头牛更大。我在网上看到 Comparable 接口对此非常有用,但我不明白,我怎么能在我的案例中实现它。
提前致谢。
有几件事你可以做,我给两个选项。
选项 1
利用 Enum
的 implementation 或 Comparable
的优势。
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.您不能覆盖 Enum
的 compareTo
方法,因为它被声明为最终方法。