枚举类型应用场景
·
1.状态 / 类型定义
// 定义订单状态枚举
enum OrderStatus {
WAIT_PAY, // 待支付
PAID, // 已支付
DELIVERED, // 已发货
COMPLETED // 已完成
}
public class Main {
public static void main(String[] args) {
OrderStatus status = OrderStatus.PAID;
// 枚举优先使用switch判断,结构更清晰
switch (status) {
case WAIT_PAY:
System.out.println("订单待支付,请尽快付款。");
break;
case PAID:
System.out.println("订单已支付,准备发货!");
break;
case DELIVERED:
System.out.println("订单已发货,请注意查收。");
break;
case COMPLETED:
System.out.println("订单已完成,交易结束。");
break;
default:
System.out.println("未知订单状态");
}
}
}
2. 策略模式(替换大量 if/else)
import java.math.BigDecimal;
import java.math.RoundingMode;
/**
* 折扣策略枚举,采用枚举内部多态实现不同折扣计算
*/
enum Discount {
/** 普通用户:无折扣 */
NORMAL {
@Override
public BigDecimal apply(BigDecimal price) {
return price;
}
},
/** VIP用户:9折 */
VIP {
@Override
public BigDecimal apply(BigDecimal price) {
return price.multiply(new BigDecimal("0.9"));
}
},
/** SVIP用户:7折 */
SVIP {
@Override
public BigDecimal apply(BigDecimal price) {
return price.multiply(new BigDecimal("0.7"));
}
};
/**
* 计算折扣后价格
* @param price 原始价格,非负
* @return 折扣后价格,保留2位小数
* @throws IllegalArgumentException 价格为负时抛出异常
*/
public abstract BigDecimal apply(BigDecimal price);
/**
* 校验价格合法性
* @param price 待校验价格
*/
protected void validatePrice(BigDecimal price) {
if (price == null || price.compareTo(BigDecimal.ZERO) < 0) {
throw new IllegalArgumentException("价格不能为空或负数");
}
}
}
public class Main {
/**
* 输出价格信息
* @param userType 用户类型
* @param originalPrice 原价
*/
public static void printDiscountPrice(String userType, Discount discount, BigDecimal originalPrice) {
BigDecimal finalPrice = discount.apply(originalPrice).setScale(2, RoundingMode.HALF_UP);
System.out.printf("%s价格:%s%n", userType, finalPrice);
}
public static void main(String[] args) {
BigDecimal originalPrice = new BigDecimal("100");
printDiscountPrice("普通用户", Discount.NORMAL, originalPrice);
printDiscountPrice("VIP", Discount.VIP, originalPrice);
printDiscountPrice("SVIP", Discount.SVIP, originalPrice);
}
}
3. 统一返回码(后端接口必备)
import java.util.Arrays;
import java.util.Optional;
/**
* 接口通用返回码枚举
*/
public enum ResultCode {
/** 请求成功 */
SUCCESS(200, "请求成功"),
/** 参数错误 */
PARAM_ERROR(400, "参数错误"),
/** 服务器异常 */
SERVER_ERROR(500, "服务器异常");
// 私有不可变成员,禁止外部直接访问修改
private final int code;
private final String msg;
/**
* 私有构造方法
* @param code 状态码
* @param msg 状态描述信息
*/
ResultCode(int code, String msg) {
this.code = code;
this.msg = msg;
}
public int getCode() {
return code;
}
public String getMsg() {
return msg;
}
/**
* 根据状态码匹配对应的枚举
* @param code 状态码
* @return 匹配的ResultCode,无匹配返回空Optional
*/
public static Optional<ResultCode> getByCode(int code) {
return Arrays.stream(ResultCode.values())
.filter(item -> item.getCode() == code)
.findFirst();
}
}
class Main {
public static void main(String[] args) {
// 模拟接口返回
ResultCode resultCode = ResultCode.SUCCESS;
printResultInfo(resultCode);
// 测试根据code查询枚举
int testCode = 400;
ResultCode.getByCode(testCode).ifPresentOrElse(
code -> printResultInfo(code),
() -> System.out.printf("未匹配到状态码 %d 对应的枚举%n", testCode)
);
}
/**
* 打印返回码信息
* @param resultCode 返回码枚举
*/
private static void printResultInfo(ResultCode resultCode) {
if (resultCode == null) {
System.out.println("返回码不能为空");
return;
}
System.out.println("状态码:" + resultCode.getCode());
System.out.println("提示信息:" + resultCode.getMsg());
System.out.println("------------------------");
}
}
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)