You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何匹配字符串获取枚举值,不匹配时返回默认值?

解决方案

原生的valueOf方法无法在字符串不匹配枚举值时返回默认值——它在找不到对应枚举常量时会直接抛出IllegalArgumentException。你需要在PGPaymentStatus枚举类中自定义静态方法来实现这个需求。

实现方式一:遍历枚举值匹配

在PGPaymentStatus中添加以下静态方法:

public static PGPaymentStatus fromString(String status) {
    for (PGPaymentStatus paymentStatus : values()) {
        if (paymentStatus.name().equals(status)) {
            return paymentStatus;
        }
    }
    log.warn("收到无法识别的支付状态: {}", status);
    return UNKNOWN;
}

实现方式二:用Stream简化代码

如果偏好更简洁的写法,可以用Stream API实现:

public static PGPaymentStatus fromString(String status) {
    return Arrays.stream(values())
            .filter(ps -> ps.name().equals(status))
            .findFirst()
            .orElseGet(() -> {
                log.warn("收到无法识别的支付状态: {}", status);
                return UNKNOWN;
            });
}

额外处理Null情况(可选)

如果需要处理传入字符串为null的场景,可以在方法开头增加判断:

public static PGPaymentStatus fromString(String status) {
    if (status == null) {
        log.warn("支付状态为null");
        return UNKNOWN;
    }
    return Arrays.stream(values())
            .filter(ps -> ps.name().equals(status))
            .findFirst()
            .orElseGet(() -> {
                log.warn("收到无法识别的支付状态: {}", status);
                return UNKNOWN;
            });
}

使用方式

替换原来的valueOf调用,改用自定义方法:

PGPaymentStatus status = PGPaymentStatus.fromString(createOrderResponse.getOrderStatus());

这样当传入的字符串不匹配任何枚举值时,就会自动返回UNKNOWN,同时日志会记录异常状态,方便后续排查问题。

内容的提问来源于stack exchange,提问作者Kuldeep Yadav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 09:57:40