我的代码如下:
for(int i=0; i < a; i++){
List<Integer> list = elementA.get(i);
SomeClass rg = new SomeClass(list, a, methodA(i));
int result = rg.generate();
var+=methodA2(i, result);
}
for(int i=0; i < b; i++){
List<Integer> list = elementB.get(i);
SomeClass rg = new SomeClass(list, b, methodB(i));
int result = rg.generate();
var+=methodB2(i, result);
}
如何避免此代码重复?我可以创建这样做的功能,但是如何处理这些不同的方法呢?
答案 0 :(得分:10)
使用Java&lt; 8你可以创建一个接口(注意Java 8中已经有一个IntFunction
接口):
interface IntFunction<A> { A apply (int i); }
m(elementA, a, new IntFunction<A> () { public A apply(int i) { methodA(i); } });
你的方法看起来像:
private void m(Collection<List<Integer>> element, int a, IntFunction<A> f) {
for(int i=0; i < a; i++){
List<Integer> list = element.get(i);
SomeClass rg = new SomeClass(list, a, f.apply(i));
int result = rg.generate();
}
}
(为了简洁,我省略了methodA2
:你需要第二个具有apply(int, int)
的接口
这非常冗长,而且与重复相比,利益并不明显。
使用Java 8,它变得更清晰:
m(elementA, a, i -> methodA(i));
//or
m(elementA, a, this::methodA);
答案 1 :(得分:1)
List<List<Integer>>
作为返回所需数据的参数。method
等通用方法(基于您的代码)。例如:
method2