比較和包含列舉值

列舉只包含常量,可以直接與 == 進行比較。因此,只需要參考檢查,無需使用 .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");
          }
      }
    }