清洁代码 - 在Java中压缩代码的最佳方法

时间:2014-04-21 17:18:18

标签: java code-cleanup

我的代码如下:

    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);
    }

如何避免此代码重复?我可以创建这样做的功能,但是如何处理这些不同的方法呢?

2 个答案:

答案 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>>作为返回所需数据的参数。
  • 定义一个接口,用于保存<{> 1}},method通用方法(基于您的代码)。

例如:

method2