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("------------------------");
    }
}

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐