クラス設計関連のチェックを行います。
private以外の識別子を持つフィールドをチェックします。
出来る限り、フィールドはprivateで宣言することが好ましいです。
package(デフォルト)属性を持つフィールドを許可します。
protected属性を持つフィールドを許可します。
チェック対象から外すpublicフィールド名を正規表現で設定します。
privateのコンストラクタしか持たないクラスが final として定義されているかどうかをチェックします。
ユーティリティクラスなど、publicコンストラクタを持っていないクラスの大半は
拡張される事を予期していません。
明示的に final で定義することで、これを抑制することが出来ます。
メソッドが定義されていないインターフェイスをチェックします。
定数インターフェイス等はこのチェックに引っ掛かります。
マーカーインターフェイス(何も定義されていないインターフェイス)を許可します。
ユーティリティクラスのコンストラクタがprivateとして宣言されているかどうかをチェックします。
public で定義されていると、
new EtcUtils().method()
こんな事をされかねません。
拡張(サブクラスでのオーバーライド)が許可されていないメソッドをチェックします。
例えば、Getter/Setter メソッドなどがこれに当てはまります。
この場合、このメソッドを final で定義するなどの処置を取る必要があります。
通常のプロジェクトではこれをチェックするのは厳しいでしょう。
ほとんどの Getter/Setter クラスはfinalで定義されていません。
Mutable として設計されていない例外クラスをチェックします。
例外クラスを判定するクラス名を正規表現で設定します。
デフォルトは ^.*Exception$|^.*Error$ です。
Mutable とは、変更可能なオブジェクトのことです。逆は Immutable と呼びます。
例えば String クラスは Immutable です。
インスタンスを構築した後でその内容を変更することが出来ないからです。
StringBuffer クラスは Mutable です。
Mutable な例外クラスを使う目的はおそらく
例外発生後にそこに情報を追加したい場合などでしょう。
しかし、こういった目的で例外クラスを使うべきではありません。
メソッドのthrows数をチェックします。
1メソッドでthrowされる例外クラスの最大数を設定します。
デフォルトは 1 です。
throw数を減らすには、共通の例外基底クラスを作って
そのサブクラス例外を発生させるようにするなどの方法があります。
くれぐれも、Exception でキャッチしよう等というアンチパターンを
使わないように…