我现在已经在 3 个不同的场合遇到过这种情况。大多数时候重构一些代码。
可以说我有:
//code block A
List<Bar> foo = doSomething(inputParams);
//code block B
现在,我需要这样refactor
的代码,以便我想使用doSomething()
方法的过程来do something else too
. 可以说,也创建一个地图(Bar.id -> Bar.name)。有没有一种优雅的方法可以做到这一点,而无需将可变映射传递给 doSomething() 并且不将代码复制到另一个doSomethingDifferent()
?
虚拟实现:
doSomething(){
List<Bar> ret = new ArrayList<Bar>();
while(//condition){
ret.add(new Bar());
}
returrn ret;
}
doSomethingDifferently(){
Map<Integer, String> ret = new HashMap<Integer, String>();
while(//condition){
Bar b = new Bar()
ret.put(b.getId(),b.getName());
}
returrn ret;
}
概括:
有没有比下面可能的解决方案更好的方法?
解决方案1:(重复代码)
List<Bar> foo = doSomething(inputParams);
Map<Integer,String> foobar = doSomethingDifferent(inputParams); //Very similar to doSomething
解决方案2:(难以阅读)
Map<Integer,String> foobar = new HashMap<Integer,String>();
List<Bar> foo = doSomething(inputParams, foobar); //mutate the map