Enums contains only constants and can be compared directly with ==
. So, only reference check is needed, no need to use .equals
method. Moreover, if .equals
used incorrectly, may raise the NullPointerException
while that's not the case with ==
check.
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!");
}
}
}
To group, complement, range the enum values we have EnumSet
class which contains different methods.
EnumSet#range
: To get subset of enum by range defined by two endpoints
EnumSet#of
: Set of specific enums without any range. Multiple overloaded of
methods are there.
EnumSet#complementOf
: Set of enum which is complement of enum values provided in method parameter
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");
}
}
}