【发布时间】:2019-07-16 10:49:33
【问题描述】:
我正在创建一个以自定义对象(比如员工)为键的 HashMap。
我没有修改 Employee 类的权限。
Employee 对象没有 args 构造函数
说Map<String, Employee> empMap 是我的地图对象。
如何在适当位置实例化对象并设置值并将其放入地图中。
Map<String, Employee> mymap = new HashMap<>();
myMap.put("employee_key", () -> {
Employee e = new Employee();
e.setSalary(10000);
return e;
});
这显示错误:lambda 转换的目标类型必须是接口。
我不想想做什么:
myMap.put("employee_key", getEmployee(1000));
private Employee getEmployee(int salary){
Employee e = new Employee();
e.setSalary(salary);
return e;
}
简而言之,我期望在不使用额外方法的情况下将其作为值放入映射中,同时进行适当的实例化和赋值。
【问题讨论】:
-
更改您的员工以便
setSalary返回this;那么你可以写myMap.put("employee_key", new Employee().setSalary(10000)。或者看看有方法的龙目岛 -
@Eugene OP 说他不可能更改课程
Employee。我一开始也忽略了这一点。第二句:我对Employee类没有修改权限 -
@deHaar 在这种情况下创建一个静态工厂方法来创建一个 Employee :
static Employee createIt(int salary) {Employee e = new Employee(); e.setSalary(salary); return e; }并使用它。 -
@Eugene 我没有修改权限,所有设置器都返回无效!此外,没有额外的方法。一切准备就绪。
-
"不使用额外方法" 即使在您的第一个示例中,您正在使用一种方法。它是 lambda 的一种方法,但它仍然是一种方法。