比较和包含枚举值

枚举只包含常量,可以直接与 == 进行比较。因此,只需要参考检查,无需使用 .equals 方法。此外,如果 .equals 使用不正确,可能会提高 NullPointerException== 检查不是这样。

enum Day {
    GOOD, AVERAGE, WORST;
}

public class Test {

    public static void main(String[] args) {
        Day day = null;

        if (day.equals(Day.GOOD)) {//NullPointerException!
            System.out.println("Good Day!");
        }

        if (day == Day.GOOD) {//Always use == to compare enum
            System.out.println("Good Day!");
        }

    }
}

要对包含不同方法的 EnumSet 类的枚举值进行分组,补充,范围。

  • EnumSet#range:按两个端点定义的范围获取枚举的子集

  • EnumSet#of:一组没有任何范围的特定枚举。有多个重载的 of 方法。

  • EnumSet#complementOf:枚举的集合,它是方法参数中提供的枚举值的补充

    enum Page {
       A1, A2, A3, A4, A5, A6, A7, A8, A9, A10
    }
    
    public class Test {
    
      public static void main(String[] args) {
          EnumSet<Page> range = EnumSet.range(Page.A1, Page.A5);
    
          if (range.contains(Page.A4)) {
              System.out.println("Range contains A4");
          }
    
          EnumSet<Page> of = EnumSet.of(Page.A1, Page.A5, Page.A3);
    
          if (of.contains(Page.A1)) {
              System.out.println("Of contains A1");
          }
      }
    }