Unlock Java Enums: Deep Dive into Their Essence, Usage, and Advanced Patterns
This article explains Java enums, their underlying class inheritance, key Enum methods, practical code examples, and advanced uses such as implementing singletons and strategy patterns, helping developers master enums for robust backend development.
Overview
Java enums are commonly used to define a fixed set of values, such as days of the week or seasons, but many developers are unaware of their underlying implementation and powerful capabilities.
Enum Definition and Basic Usage
Enums define a limited collection of constant values.
enum WeekEnum {
MONDAY, TUESDAY
}
enum StatusEnum {
ENABLE("1", "Enabled"),
DISABLE("0", "Disabled");
private String code;
private String name;
StatusEnum(String code, String name) {
this.code = code;
this.name = name;
}
}Key Enum Methods (java.lang.Enum)
static Enum valueOf(Class enumClass, String name) – returns the enum constant with the specified name.
String toString() – returns the name of the enum constant.
int ordinal() – returns the position of the constant in the enum declaration (starting at 0).
int compareTo(E other) – compares the order of two enum constants.
Practical Example
public static void main(String[] args) {
// Get enum by name
StatusEnum enable = Enum.valueOf(StatusEnum.class, "ENABLE");
System.out.println(enable);
// Enum comparison using ==
System.out.println(enable == StatusEnum.ENABLE);
// Retrieve all enum values
StatusEnum[] values = StatusEnum.values();
for (StatusEnum statusEnum : values) {
// Print the ordinal of each enum constant
System.out.println(statusEnum.ordinal());
}
}Running the above code produces the expected enum instance, a true comparison result, and the ordinal values of the constants.
The Essence of Enums
At compile time, an enum is a class that extends java.lang.Enum. The enum constants become static fields of the enum class, and the class initialization creates the enum objects.
During class loading, the static fields ENABLE and DISABLE are instantiated.
Common Enum Use Cases
Enum as Singleton
Enums provide a thread‑safe way to implement the singleton pattern, guaranteeing a single instance and protecting against serialization attacks.
public class User {
private User() {}
static enum SingletonEnum {
INSTANCE;
private User user;
private SingletonEnum() { user = new User(); }
public User getInstance() { return user; }
}
public static User getInstance() {
return SingletonEnum.INSTANCE.getInstance();
}
}Enum with Abstract Methods (Strategy Pattern)
Enums can declare abstract methods and let each constant provide its own implementation, enabling flexible strategy selection.
enum OperEnum {
ADD(1, 2) {
@Override public Integer operate() { return getA() + getB(); }
},
MULTIPLY(1, 2) {
@Override public Integer operate() { return getA() * getB(); }
};
private Integer a;
private Integer b;
OperEnum(Integer a, Integer b) { this.a = a; this.b = b; }
public abstract Integer operate();
public Integer getA() { return a; }
public Integer getB() { return b; }
}Conclusion
The article covered the fundamental nature of Java enums, their compiled form, essential methods, and advanced applications such as singletons and strategy patterns, providing developers with a deeper understanding to write cleaner and more robust backend code.
Signed-in readers can open the original source through BestHub's protected redirect.
This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactand we will review it promptly.
macrozheng
Dedicated to Java tech sharing and dissecting top open-source projects. Topics include Spring Boot, Spring Cloud, Docker, Kubernetes and more. Author’s GitHub project “mall” has 50K+ stars.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.
