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; }
関連記事
コメント 0