在单行中设置另一个属性后返回Object

问题描述 投票:0回答:3

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

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

出于某种原因,我无法修改PoolInstance。

java java-ee
3个回答
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


0
投票

简短回答NO,

原因:

第一个直觉是

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

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


0
投票

尽管不是那么可读,但它可以使用流。看起来像:

public MyObject getObj(String name){
    return Stream.of(PoolInstance.get(name)).peek(o -> o.setFound(true)).findFirst().get();
}
© www.soinside.com 2019 - 2024. All rights reserved.