有没有办法我可以在一行中的方法中编写下面的代码,代码没有问题,只是好奇
public MyObject getObj(String name){
MyObj myObj = PoolInstance.get(name);
myObj.setFound(true);
return myObj;
}
由于某些原因,我无法修改PoolInstance。
答案 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();
}