在lambda表达式中使用参数调用构造函数

Yan*_*ski 2 java lambda

我有员工类:

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,"",""
无法解析构造函数.

Boh*_*ian 9

使用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 次

最近记录:

8 年,9 月 前