在一行中设置另一个属性后返回对象

时间:2019-03-28 19:13:44

标签: java java-ee

有没有办法我可以在一行中的方法中编写下面的代码,代码没有问题,只是好奇

public MyObject getObj(String name){
  MyObj myObj = PoolInstance.get(name);
  myObj.setFound(true);
  return myObj;
}

由于某些原因,我无法修改PoolInstance。

3 个答案:

答案 0 :(得分:1)

您可以将逻辑封装在返回对象实例本身的setter中:

class MyObject {

    private boolean found;

    public MyObject withFound(boolean isFound) {
        this.found = isFound;
        return this;
    }
}

客户代码:

public MyObject getObj(String name){
   return PoolInstance.get(name).withFound(true);
}

也可以考虑使用GoF Builder设计模式来获得更多惯用且灵活的代码:Builder pattern example with explanation

答案 1 :(得分:0)

否定答案

原因:

第一个直觉是

return PoolInstance.get(name).setFound(true); 

但这是不正确,因为setFound不返回MyObj。

答案 2 :(得分:0)

尽管可读性不强,但可以使用流。看起来像:

public MyObject getObj(String name){
    return Stream.of(PoolInstance.get(name)).peek(o -> o.setFound(true)).findFirst().get();
}