24

PMD ルールに問題がありAvoid instantiating new objects inside loopsます。コード例を次に示します。

import java.awt.Dimension;

public class PMDDemo {
    public static void main(final String[] args) {
        final Dimension[] arr = new Dimension[10];
        for (int i = 0; i < arr.length; i++) {
            arr[i] = new Dimension(i, i); // rule violation here
        }
    }
}

PMD は、コード内のマークされた場所で上記のルール違反を示します。ループ内で作成せずに、クラスのnインスタンスを作成するにはどうすればよいですか?

PMD のルールのいくつかが物議を醸していることは知っています ( onlyOneExitルールなど)。しかし、これまでのところ、少なくともそれらの背後にある考え方は理解できました。このルールの背後にある理由がわかりません。誰かがそれを手伝ってくれますか?

4

2 に答える 2

-1
for (int i = 0; i < arr.length; i++) {
  arr[i] = new Dimension(i, i); // rule violation here
}

上記の Pmd は、次の方法で解決できます。

 for (int i = 0; i < arr.length; i++) {
   arr[i] = createNewDimension(i,i); // rule violation here
 }

 private static Dimension createNewDimension(i,i) {
   return new Dimension(i, i);
 }

ループ内で new 演算子を直接使用しないでください。これをプライベート メソッド内に移動するだけです。

于 2016-12-01T21:23:41.730 に答える