java - Android Studio 在使用 orElseThrow 方法时需要捕获 Throwable

标签 java android option-type

我正在 Android Studio 中编写应用程序。我当前的版本是 3.1.0。我正在尝试使用 Optional 类中的 orElseThrow 方法。我检查了 Android Studio 的设置,它需要至少 24 的 API 级别才能使用 Optional。我目前使用的是 API 级别 25,我的 JDK 是 1.8.0_151。

我使用 Empty Activity 创建了一个新的 Android Studio 项目。我创建了一个名为 TestClass 的类,其中包含以下代码:

package com.examples.myapplication;

import java.util.Arrays;
import java.util.List;

public final class TestClass {

    private final List<Integer> numbers;

    public TestClass() {
        numbers = Arrays.asList(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
    }

    public final int doesNumberExist(final int number) {
        return numbers.stream().filter(n -> n == number).findAny().orElseThrow(RuntimeException::new);
    }
}

我在这里遇到的问题是 Android Studio 在 doesNumberExist() 方法中调用 orElseThrow() 时给我一个编译时错误。

错误是:

Unhandled exception: java.lang.Throwable

我已经尝试在不同的 IDE 中运行 orElseThrow 方法,并且该行代码没有编译时错误,所以我认为问题出在 Android Studio 中,但我无法弄清楚会发生什么导致问题。我曾尝试提高 API 级别,但我只能提高到 26,但没有任何作用。

根据我对 orElseThrow() 方法工作方式的理解,您应该处理的异常类型是您在方法调用中抛出的任何已检查异常。在此示例中,我使用了 RuntimeException,因此我不必处理捕获任何异常。

最佳答案

public final int doesNumberExist(final int number) throws Throwable {
    Optional<int> f = numbers.stream().filter(n -> n == number).findAny();
    return  f.orElseThrow(RuntimeException::new);
}

关于java - Android Studio 在使用 orElseThrow 方法时需要捕获 Throwable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51119540/

相关文章:

java - 将 java.util.Date 转换为 org.joda.time.LocalDateTime 时出现问题

android - 从 Firebase 中的多个位置接收到数据后继续执行

java - Jmeter:创建数组,然后设置属性,然后在数组中输入值

Java - x32 和 x64 之间的奇数内存消耗

java - 列表项 ArrayList ListView

java - 为什么Java的Optional在ifPresent()中不调用Consumer?

java - 返回事物或导致调用范围/上下文返回的辅助方法

swift - 在swift中从api访问嵌套字典

java - SQL 连接错误,凭据正确,所有权限和访问权限均正确

java - Android:比较 ImageButton 和资源中的图像