比较 Java 枚举值

2022-08-31 16:37:53

有没有办法检查枚举值是否“大于/等于”另一个值?

我想检查错误级别是否为“错误或更高”。


答案 1

所有 Java 枚举都实现了可比较:http://java.sun.com/javase/6/docs/api/java/lang/Enum.html

您也可以使用该方法将它们转换为s,然后比较是微不足道的。ordinalint

if (ErrorLevel.ERROR.compareTo(someOtherLevel) <= 0) {
  ...
}

答案 2

一个更具表现力的版本将是

myError.isErrorOrAbove(otherError)

myError.isWorseThan(otherError)

这样,您就可以在枚举中定义顺序,并可以根据需要在内部更改实现。现在,枚举的客户端可以在不知道任何细节的情况下比较值。

一个可能的实现

public enum ErrorLevel {

    INFO(0),
    WARN(1),
    ERROR(2),
    FATAL(3);

    private Integer severity;

    ErrorLevel(int severity) {
        this.severity = severity;
    }

    public boolean isWorseThan(ErrorLevel other) {
        return this.severity > other.severity;
    }
}

我也不建议使用ordinal()方法进行比较,因为当有人更改Enum值定义的顺序时,您可能会遇到意外的行为。