我有员工类:
public class Employee {
private Long id;
private String name;
private String externalId;
public Employee(Long id, String name, String externalId) {
this.id = id;
this.name = name;
this.externalId = externalId;
}
//getters, setter
}
Run Code Online (Sandbox Code Playgroud)
返回员工的员工服务(可以为NULL).
private void performEmployeeProcessing() {
Long employeeId = 2L;
Object o = Optional.ofNullable(employeeService.getById(employeeId))
.orElseGet(Employee::new, 1L, "", "");
System.out.println(o);
}
Run Code Online (Sandbox Code Playgroud)
它说编译错误
Employee :: new,1L,"",""
无法解析构造函数.
使用Supplier:
.orElseGet(() -> new Employee( 1L, "", ""));
Run Code Online (Sandbox Code Playgroud)
仅供参考,Employee只有在实际需要时才会创建实例.
如果你的构造函数没有args,你可以使用方法引用Employee::new.如果创建工厂方法,仍可以使用方法引用:
class Employee {
// rest of class
public static Employee createDummy() {
return new Employee( 1L, "", "");
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以:
.orElseGet(Employee::createDummy);
Run Code Online (Sandbox Code Playgroud)
工厂方法实际上可以在任何类中.
| 归档时间: |
|
| 查看次数: |
4221 次 |
| 最近记录: |