【发布时间】:2020-01-31 18:07:42
【问题描述】:
我们来看一些简单的示例代码:
Employee employee = repository.findById(id).orElseThrow(() -> new EmployeeNotFoundException(id));
据我了解,lambda是用来创建函数接口的子类(只有1个方法),空括号表示该方法没有参数。
但是在 orElseThrow 中调用了什么方法需要 lambda?我以为是Optional 或Exception。
所以我的问题是:如果没有 lambda 调用,这会是什么样子?
员工类:
class Employee {
private Long id;
private String name;
private String role;
Employee() {}
Employee(String name, String role) {
this.name = name;
this.role = role;
}
}
以及异常类:
class EmployeeNotFoundException extends RuntimeException {
EmployeeNotFoundException(Long id) {
super("Could not find employee " + id);
}
}
编辑:我对如何为 lambda 表达式编写一个有效的、可编译的替换很感兴趣。 现在我在
Employee employee = repository.findById(id).orElseThrow(
new Supplier<Throwable>() {
@Override
public Throwable get() {
return new EmployeeNotFoundException(id);
}
}
)
但这是不对的,因为现在我需要将异常添加到方法签名中,而使用 lambda 时并非如此。它表明我不知道如何手动实现供应商类而不是通过使用 lambdas 跳过所有这些
【问题讨论】:
-
在提问之前您进行了哪些搜索和研究?例如,查看the documentation?请在先进行搜索和研究时,告诉我们您发现了什么以及它是如何不足的。它可以提出更好的问题 - 并获得更好的答案,所以这是为了你自己。
-
我已经阅读了文档,但是我的 Java 知识有点生疏,我很难理解到底是什么被替换了。我不知道如何在没有 lambda 的情况下编写 orElseThrow,例如将供应商作为匿名类放在那里
标签: java exception lambda optional