2 回答
TA贡献1993条经验 获得超5个赞
传递Supplier给orElseThrow应该返回构造的异常,该异常与该方法的通用签名相关,该方法声明抛出供应商返回的内容。由于您的供应商没有返回值,JDK 8javac推断Throwable并要求调用者orElseThrow处理它。较新的编译器可以在这种情况下方便地进行推断RuntimeException,并且不会产生错误。
不过,正确的用法是
protected String sendTemplate1() {
String template = getTemplate();
return Optional.ofNullable(template)
.orElseThrow(() -> new NullPointerException("message"));
}
但这是对Optionalanyway 的过度使用。你应该简单地使用
protected String sendTemplate() {
return Objects.requireNonNull(getTemplate(), "message");
}
见requireNonNull(T, String)
和requireNonNull(T, Supplier<String>)
。
TA贡献1155条经验 获得超0个赞
改变这个
protected String sendTemplate() {
String template = getTemplate();
return Optional.ofNullable(template).orElseThrow(() -> {
throw new NullPointerException("message");
});
}
这样:
protected String sendTemplate() {
String template = getTemplate();
return Optional.ofNullable(template).orElseThrow(() -> {
return new NullPointerException("message"); // <--- RETURN here
});
}
方法orElseThrow()需要一个供应商(即创建异常的东西)。你不能抛出异常,只是创建它。
添加回答
举报