最適化に関するルールセットです。
1回しか代入されないローカル変数がfinalとして宣言されていない箇所を検出します。
public void bar() {
String s = "s";
// その後、sへの代入処理が存在しない場合、sはfinalとして宣言すべき
}
代入されないメソッドパラメータがfinalとして宣言されていない箇所を検出します。
public void bar(int count) {
// メソッド内でcountへの代入処理が存在しない場合、countはfinalとして宣言すべき
}
ループ内でオブジェクトを生成している箇所を検出します。
Vector を使用している箇所を検出します。
代わりに ArrayList を使用しましょう。
ReplaceVectorWithList と同じです。
String.startsWith メソッドの引数に一文字を渡している箇所を検索します。
if (x.startsWith("x")) {
// これは、if (x != null && x.charAt(0) == 'x') とした方がコストが安い
}
文字列の連結に += 演算子を使っている箇所を検出します。
String a = "abc"; ... a += "def"; // 文字列の連結には StringBuffer(Builder) を使用した方が良い
配列をリストに変換するのに Arrays.asList を使用していない箇所を検出します。
List l = new ArrayList();
for (int i = 0; i < ints.length; i++) {
l.add(ints[i]);
}
// List l = Arrays.asList(ints); を使った方がシンプルで高速
配列から配列へコピーするのに System.arrayCopy を使用していない箇所を検出します。
for (int i = 0; i < 10; i++) {
b[i] = a[i];
}
// System.arrayCopy() を使った方がシンプルで高速
不必要なラッパーオブジェクトの使用を検出します。
i = Integer.valueOf(s).intValue(); // これは下のように書き直せる i = Integer.parseInt(s); // こちらの方が良い
空文字に追加しているロジックを検出します。
String s = "" + 123; // こういうのはホント止めて下さい… String t = Integer.toString(456); // OK!