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
相关产品推荐
相关产品推荐

