让我们看一些简单的示例代码:
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 时情况并非如此。它表明我不知道如何手动实现供应商类,而不仅仅是使用 lambda 跳过所有这些
陪伴而非守候
交互式爱情
料青山看我应如是
收到一只叮咚
相关分类