java - 无法在 Java 中使用 orElseThrow 抛出自定义异常

标签 java if-statement nullpointerexception option-type conditional-operator

我尝试使用三元运算和 orElseThrow 抛出自定义异常,如下所示:

public static MainProviderType getMainProviderType(ProviderType providerType) {
    return Optional.ofNullable(MainProviderType.valueOf(providerType.name()))
        .orElseThrow(() -> new ProviderTypeNotFoundException(providerType.name()));
}

但是,当 providerType 为 null 时,此方法返回 NullPointerException 而不是 ProviderTypeNotFoundException。我认为问题与此有关;它无法评估 MainProviderType.valueOf(providerType.name()),因为 providerType.name()。真的吗?我应该如何使用它并解决问题?

最佳答案

public static MainProviderType getMainProviderType(ProviderType providerType) {
    return Optional.ofNullable(providerType)
    .map(ProviderType::name)
    .map(MainProviderType::valueOf)
    .orElseThrow(() -> new ProviderTypeNotFoundException("some message"));
}

更新带有测试用例的完整示例

    private enum ProviderType {
        ONE,
        TWO
    }

    private enum MainProviderType {
        ONE,
        TWO,
        THREE
    }

    public MainProviderType getMainProviderType(ProviderType providerType) {
        return Optional.ofNullable(providerType)
            .map(ProviderType::name)
            .map(MainProviderType::valueOf)
            .orElseThrow();
    }

    @Test
    void selectMainProviderType() {
        var mainProviderType = getMainProviderType(ProviderType.ONE);

        assertEquals(MainProviderType.ONE, mainProviderType);
    }

关于java - 无法在 Java 中使用 orElseThrow 抛出自定义异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68767447/

相关文章:

java - 无法解析实体的属性

Java JsonPath函数 "indexOf"给出异常: Arguments to function: 'indexOf' are not closed properly

java - 已签名的APK中出现Android Gradle警告问题。请首先更正以上警告

javascript - 多维数组中的循环未显示预期内容

java - 为什么这会抛出 NullPointerException?

Android startCamera 给了我 null Intent 并且......它会破坏我的全局变量吗?

java - 尝试做滑动窗口

C 中的复合关系运算符

c++ - 检查: equal to or not equal to?有什么效率

Android 单元测试过去工作正常,现在抛出 NullPointerException