私は今、3つの異なる機会にそのようなケースに遭遇しました. ほとんどの場合、一部のコードをリファクタリングするとき。
私が持っているとしましょう:
//code block A
List<Bar> foo = doSomething(inputParams);
//code block B
今、私はメソッドのプロセスをrefactor
使用したいようなコードが必要です. たとえば、マップも作成します (Bar.id -> Bar.name)。変更可能なマップを doSomething() に渡さずに、コードを別のものに複製せずにこれを行うエレガントな方法はありますか?doSomething()
do something else too
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