枚举的实际应用示例
支付方式枚举
public enum PaymentMethod {
CREDIT_CARD {
@Override
public void processPayment(double amount) {
System.out.println("Processing credit card payment: $" + amount);
}
},
PAYPAL {
@Override
public void processPayment(double amount) {
System.out.println("Processing PayPal payment: $" + amount);
}
},
BANK_TRANSFER {
@Override
public void processPayment(double amount) {
System.out.println("Processing bank transfer: $" + amount);
}
};
public abstract void processPayment(double amount);
}
用户角色管理
public enum UserRole {
ADMIN(3, "Full system access"),
MANAGER(2, "Partial system access"),
USER(1, "Limited access");
private final int accessLevel;
private final String description;
UserRole(int accessLevel, String description) {
this.accessLevel = accessLevel;
this.description = description;
}
public boolean hasAccess(UserRole requiredRole) {
return this.accessLevel >= requiredRole.accessLevel;
}
}
枚举状态机
stateDiagram-v2
[*] --> PENDING
PENDING --> APPROVED
PENDING --> REJECTED
APPROVED --> COMPLETED
REJECTED --> [*]
COMPLETED --> [*]
订单状态枚举
public enum OrderStatus {
PENDING {
@Override
public boolean canTransitionTo(OrderStatus newStatus) {
return newStatus == APPROVED || newStatus == REJECTED;
}
},
APPROVED {
@Override
public boolean canTransitionTo(OrderStatus newStatus) {
return newStatus == COMPLETED;
}
},
REJECTED,
COMPLETED;
public boolean canTransitionTo(OrderStatus newStatus) {
return false;
}
}
配置设置枚举
public enum AppSettings {
DATABASE_URL("jdbc:mysql://localhost:3306/labex"),
MAX_CONNECTIONS("10"),
LOGGING_LEVEL("INFO");
private final String defaultValue;
AppSettings(String defaultValue) {
this.defaultValue = defaultValue;
}
public String getDefaultValue() {
return defaultValue;
}
}
枚举比较矩阵
枚举类型 |
使用场景 |
主要优点 |
PaymentMethod |
支付处理 |
多态行为 |
UserRole |
访问控制 |
安全管理 |
OrderStatus |
工作流管理 |
状态转换控制 |
AppSettings |
配置管理 |
集中式设置 |
LabEx 中使用枚举的设计模式
- 策略模式实现
- 状态机建模
- 配置管理
- 类型安全的常量定义
高级枚举技术
public class EnumUtils {
public static <T extends Enum<T>> T findByProperty(
Class<T> enumClass,
Function<T, Boolean> predicate
) {
return Arrays.stream(enumClass.getEnumConstants())
.filter(predicate::apply)
.findFirst()
.orElse(null);
}
}
最佳实践
- 对有限的、已知的值集使用枚举
- 在枚举中实现方法以处理复杂行为
- 利用枚举实现类型安全和提高可读性
- 考虑性能和内存影响
通过探索这些枚举的实际应用示例,开发人员可以解锁强大的设计模式并创建更健壮的 Java 应用程序。