Enum in Java

  • Enum syntax
  • Enum with methods and switch statement
  • Advance enum

Enum syntax

public enum DayOfWeek {
MON, TUE, WED, THUR, FRI, SAT, SUN
}
  • Enum is a special class for constants so to create the enum we need to write enum instead of class.
  • In the body of enum, we can just list all constant values enum should have.
  • As a constant, the values of enum go in uppercase.
public class Main {
public static void main(String[] args) {
DayOfWeek day = DayOfWeek.FRI;
System.out.println(day); // FRI

day = DayOfWeek.MON;
System.out.println(day); // MON

System.out.println(DayOfWeek.SUN); // SUN
}
}
  • We can get enum by using its name and actual constant value.
  • We can create a variable that can hold enum.
// return all values as array
DayOfWeek[] values = DayOfWeek.values();
for (DayOfWeek day : values) {
System.out.println(day);
}

DayOfWeek myDay = DayOfWeek.valueOf("MON");
// We can get enum from string using valueOf method
// It's case sensitive and value should match exactly
// otherwise exception will occur
// DayOfWeek myDay = DayOfWeek.valueOf("mon"); exception here
  • The enum has few methods. In the above example, I’m showing two of them.
  • values() — return all values of enum as an array
  • valueOf(String) — it’s possible to get enum from a string as well.
DayOfWeek day = DayOfWeek.MON;
DayOfWeek day1 = DayOfWeek.MON;

System.out.println(day == day1); // true
System.out.println(day.equals(day1)); // true
  • We can check enums on equality with == operator and with equals() method.

Enum with methods and switch statement

public class Main {
public static void disStudyMsg(String day) {
switch (day) {
case "MON":
case "WED":
case "FRI":
System.out.println("Java coding day");
break;
case "TUE":
case "THUR":
System.out.println("Reading day");
break;
case "SAT":
case "SUN":
System.out.println("Getting rest day");
break;
default:
throw new IllegalArgumentException("No supported day: " + day);
}
}

public static void main(String[] args) {
disStudyMsg("MON"); // Java coding day
disStudyMsg("Sunday"); // exception here
}
}
  • above method was designed without enum. The method accepts a string as a day and the method will print a message. Note, if client code will provide wrong input, the method will throw a runtime exception. It would be great to catch wrong input during the compilation stage. We can use our enum to do so.
public class Main {
public static void disStudyMsg(DayOfWeek day) {
switch (day) {
case MON:
case WED:
case FRI:
System.out.println("Java coding day");
break;
case TUE:
case THUR:
System.out.println("Reading day");
break;
case SAT:
case SUN:
System.out.println("Getting rest day");
break;
}
}

public static void main(String[] args) {
disStudyMsg(DayOfWeek.MON); // Java coding day
//disStudyMsg(DayOfWeek.Sunday); // does not compile
// there is no Sunday value in DayOfWeek enum
}
}
  • When using Enum we are making sure that client code never can provide wrong input. It will not just simply compile.
  • The switch statement can be used with Enum. Notice, the case value does not have an enum name but just its value.

Advance Enum

public enum Grade {
A("90-100"),
B("80-89"),
C("70-79"),
D("60-69"),
F("0-59");

private String gradeDescription;
private Grade(String desc) {
this.gradeDescription = desc;
}

public void seeDescription() {
System.out.println(this.gradeDescription);
}
}
  • Notice, we have ; after list of values. Without it will not compile.
  • Enum can have only private constructors. It can be used inside the enum only. When declaring our constant enums we need to provide value for our constructor.
public class Main {
public static void main(String[] args) {
Grade grade = Grade.A;
System.out.println(grade); // A
grade.seeDescription(); // 90-100
}
}

--

--

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store