PMD – Optimizationルール・セット


最適化に関するルールセットです。
※PMD 3.9に対応しています。

LocalVariableCouldBeFinal

一度しか使われていないローカル変数名がfinalで宣言されているかチェックします。

public class Bar
{
    public void foo ()
    {
        // 以降、再割り当てされないのであればfinalで宣言すべきです
        String a = "a";
        final String b = "b";
    }
}

MethodArgumentCouldBeFinal

代入されていないメソッドのパラメータがfinalで宣言されているかチェックします。

public void foo (String param)
{
    // paramが代入されないのであれば、
    // public void foo (final String param)とすべきです
}

AvoidInstantiatingObjectsInLoops

ループの中でオブジェクトが生成されていないかチェックします。

public class Something
{
    public static void main(String as[])
    {
        for (int i = 0; i < 10; i++)
        {
            // ループの中でオブジェクトを生成するのは避けるべきです
            Foo f = new Foo();
        }
    }
}

UseArrayListInsteadOfVector

Vectorが使用されていないかチェックします。
Vectorの代わりにjava.util.ArrayListを使用すべきです。

public class SimpleTest extends TestCase
{
    public void testX()
    {
        Collection c = new Vector();
        // ArrayListの方がパフォーマンスがよいので
        // Collection c = new ArrayList();とすべきです
    }
}

SimplifyStartsWith

String.startsWith()メソッドの引数が1文字のものがないかチェックします。
String.charAt()メソッドを使用すべきです。

public class Foo
{
    boolean checkIt(String x)
    {
        return x.startsWith("a");
    }
}

UseStringBufferForStringAppends

文字列を+=で連結していないかチェックします。

public class Foo
{
    void bar()
    {
        String a;
        a = "foo";
        a += " bar";
        // StringBufferを使用した方がパフォーマンスがよいです
        // StringBuffer a = new StringBuffer("foo");
        // a.append(" bar");
    }
}

UseArraysAsList

配列からリストに変換するのにArrays.asListを使用しているかチェックします。

public class Test
{
    public void foo(Integer[] ints)
    {
        // Arrays.asList(ints)を使用すべきです
        List l = new ArrayList(10);
        for (int i = 0; i < 100; i++)
        {
            l.add(ints[i]);
        }
    }
}

AvoidArrayLoops

配列をコピーするのにSystem.arrayCopyを使用しているかチェックします。

public class Test
{
    public void bar()
    {
        // System.arrayCopy()を使用すべきです
        int[] a = new int[10];
        int[] b = new int[10];
        for (int i = 0; i < 10; i++)
        {
            b[i] = a[i];
        }
    }
}

UnnecessaryWrapperObjectCreation

ラッパーオブジェクトが不必要に使用されていないかチェックします。

public int convert(String s)
{
    int i;
    // ラッパーオブジェクトが不必要に使用されている
    i = Integer.valueOf(s).intValue();

    // 上記よりこちらの方がよい
    i = Integer.parseInt(s);

    return i;
}

関連記事

  1. コメント 0

  1. トラックバック 0

return top