1

私は今、3つの異なる機会にそのようなケースに遭遇しました. ほとんどの場合、一部のコードをリファクタリングするとき。

私が持っているとしましょう:

//code block A
List<Bar> foo = doSomething(inputParams);
//code block B

今、私はメソッドのプロセスをrefactor使用したいようなコードが必要です. たとえば、マップも作成します (Bar.id -> Bar.name)。変更可能なマップを doSomething() に渡さずに、コードを別のものに複製せずにこれを行うエレガントな方法はありますか?doSomething()do something else toodoSomethingDifferent()

ダミー実装:

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
4

2 に答える 2

3

異なるデータ構造を返しています..

List<Bar> foo = doSomething(inputParams);
Map<Integer,String> foobar = doSomethingDifferent(inputParams); 

彼らが同じようなことをしていると確信していますか?もしそうなら、共通部分を抽出するか、それらを変更して同じ型を返すことができます。その後、コードを複製しないために何ができるかが簡単にわかります。

于 2013-08-06T13:14:58.887 に答える