【发布时间】:2018-12-09 16:47:42
【问题描述】:
我正在 Android Studio 中编写一个应用程序。我当前的版本是 3.1.0。我正在尝试使用 Optional 类中的 orElseThrow 方法。我检查了 Android Studio 的设置,它要求 API 级别至少为 24 才能使用 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 在 dosNumberExist() 方法中的 orElseThrow() 调用上给了我一个编译时错误。
错误是:
Unhandled exception: java.lang.Throwable
我尝试在不同的 IDE 中运行 orElseThrow 方法,并且该行代码没有编译时错误,所以我认为问题出在 Android Studio 上,但我不知道会发生什么导致问题。我试过提升 API 级别,但我只能升到 26 级,而且没有任何作用。
根据我对 orElseThrow() 方法工作方式的理解,您应该处理的异常类型是您在方法调用中抛出的任何已检查异常。在此示例中,我使用了 RuntimeException,因此我不必处理捕获任何异常。
【问题讨论】:
-
如果您可以使用minimal, complete example 更新您的问题,这样我们就可以重现问题,这将很有帮助。
-
很好的建议@Radiodef 和提示:
[mcve]在评论中自动扩展为minimal reproducible example。 -
这个问题对我来说似乎很完整,上面的代码也为我重现了这个问题。
-
我已经打开了一个问题:issuetracker.google.com/issues/120871350