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

时间:2017-02-09 12:08:38

标签: 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
}

返回员工的员工服务(可以为NULL)。

private void performEmployeeProcessing() {
    Long employeeId = 2L;
    Object o = Optional.ofNullable(employeeService.getById(employeeId))
        .orElseGet(Employee::new, 1L, "", "");

    System.out.println(o);
}

它说编译错误

  

员工::新,1L,"",""
  无法解析构造函数。

2 个答案:

答案 0 :(得分:8)

使用for slice in v.iter().collect::<Vec<_>>().chunks(2) { println!("{:?}", slice); } for slice in v.iter().collect::<Vec<_>>().windows(2) { println!("{:?}", slice); }

Supplier

仅供参考,.orElseGet(() -> new Employee( 1L, "", "")); 实例只有在实际需要时才会创建。

如果你的构造函数没有args,你可以使用方法引用Employee。如果创建工厂方法,仍然可以使用方法引用:

Employee::new

然后你可以:

class Employee {
    // rest of class
    public static Employee createDummy() {
        return new Employee( 1L, "", "");
    }
}

工厂方法实际上可以在任何类中。

答案 1 :(得分:0)

使用此:

.orElseGet(new Employee( 1L, "", ""));