枚举 ValueOf 空检查和异常处理

Enum ValueOf null check & exception handling

我正在尝试优化下面的代码,我想看看是否有办法避免抛出两次异常并将其优化为只抛出一次。有什么建议吗?

User 是一个枚举,如果没有找到值,valueOf 方法将抛出 IllegalArgumentException,同时我还必须在此处进行 null 检查,从而再次检查 isBlank。

private UserContext getContext(String name) {

        UserContext context = null;

        if (StringUtils.isBlank(name)) {
            throw new IllegalArgumentException("name cannot be Null or empty");
        }

        try {
        context  = map.get(User.valueOf(name.toUpperCase()));

        }catch(IllegalArgumentException e) {
            throw new IllegalArgumentException("name is not in the list of given names" +name);
        }

        return context;

    }

最好将验证 User 枚举的名称的逻辑移动到 User 枚举内的静态方法中。

此外,null/empty 的检查似乎是多余的,可能会被完全删除。

public enum User {
    // ... existing code

    public static User byName(String name) {
        // this check may be removed completely
        if (StringUtils.isBlank(name)) {
            throw new IllegalArgumentException("name cannot be null or empty");
        }

        return Arrays.stream(User.values())
            .filter(v -> v.name().equalsIgnoreCase(name)) // null-safe case insensitive check
            .findFirst() // Optional<User>
            .orElseThrow(() -> new IllegalArgumentException("name is not in the list of given names: " + name));
    }
}

然后方法 getContext 可以重构为简单如下:

private UserContext getContext(String name) {
    return map.get(User.byName(name));
}