6.4. Enumerations
An enumeration (enum) is a special data type that enables a variable to be a set of predefined constants. Enums make code more readable and maintainable by replacing magic numbers and strings with meaningful names.
Basic Enum Declaration
java
// Simple enum definition
public enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}
public enum Priority {
LOW, MEDIUM, HIGH, URGENT
}
Using Enums
java
public class EnumExample {
public static void main(String[] args) {
// Enum variable declaration and assignment
Day today = Day.MONDAY;
Priority taskPriority = Priority.HIGH;
// Using enums in switch statements
switch (today) {
case MONDAY:
System.out.println("Start of work week");
break;
case FRIDAY:
System.out.println("Weekend is near!");
break;
default:
System.out.println("Regular day");
}
// Comparing enum values
if (taskPriority == Priority.HIGH) {
System.out.println("This task requires immediate attention");
}
}
}
Enums with Fields and Methods
java
public enum Planet {
// Enum constants with parameters
MERCURY(3.303e+23, 2.4397e6),
VENUS(4.869e+24, 6.0518e6),
EARTH(5.976e+24, 6.37814e6),
MARS(6.421e+23, 3.3972e6),
JUPITER(1.9e+27, 7.1492e7),
SATURN(5.688e+26, 6.0268e7),
URANUS(8.686e+25, 2.5559e7),
NEPTUNE(1.024e+26, 2.4746e7);
// Fields
private final double mass; // in kilograms
private final double radius; // in meters
// Constructor
Planet(double mass, double radius) {
this.mass = mass;
this.radius = radius;
}
// Methods
public double getMass() {
return mass;
}
public double getRadius() {
return radius;
}
public double getSurfaceGravity() {
final double G = 6.67300E-11; // gravitational constant
return G * mass / (radius * radius);
}
public double getSurfaceWeight(double otherMass) {
return otherMass * getSurfaceGravity();
}
}
Advanced Enum Features
java
public enum Operation {
// Each constant has associated behavior
PLUS("+") {
public double apply(double x, double y) { return x + y; }
},
MINUS("-") {
public double apply(double x, double y) { return x - y; }
},
TIMES("*") {
public double apply(double x, double y) { return x * y; }
},
DIVIDE("/") {
public double apply(double x, double y) { return x / y; }
};
private final String symbol;
Operation(String symbol) {
this.symbol = symbol;
}
// Abstract method - each constant must implement
public abstract double apply(double x, double y);
@Override
public String toString() {
return symbol;
}
}
Enum Utility Methods
java
public class EnumUtilities {
public static void main(String[] args) {
// Getting all enum values
Day[] days = Day.values();
for (Day day : days) {
System.out.println(day);
}
// Getting enum from string
Day monday = Day.valueOf("MONDAY");
// Getting enum name and ordinal
System.out.println("Name: " + monday.name()); // MONDAY
System.out.println("Ordinal: " + monday.ordinal()); // 1
// Comparing enums
System.out.println(Day.MONDAY.compareTo(Day.FRIDAY)); // negative number
}
}
Enum Best Practices
- Use for fixed sets of constants
- Implement with methods for behavior
- Use in switch statements for readability
- Consider implementing interfaces for additional functionality