親モジュール | TreeWalker |
---|---|
実装クラス | com.puppycrawl.tools.checkstyle.checks.VisibilityModifierCheck(≦3.1) com.puppycrawl.tools.checkstyle.checks.design.VisibilityModifierCheck(3.2) |
フィールドに適切なアクセス制限がかかっているかをチェックします。
Rationale: カプセル化を強制させるため。
プロパティ名 | 型 | デフォルト | 概要 |
packageAllowed | Boolean | false | package(デフォルト)修飾子を認めるかどうか? |
protectedAllowed | Boolean | false | protected 修飾子を認めるかどうか? |
publicMemberPattern | Regular Expression | ^serialVersionUID$ | public修飾子を認めるメンバを表す正規表現 |
<module name = "Visibility Modifier"> <property name = "packageAllowed" value = "false" /> <property name = "protectedAllowed" value = "false" /> <property name = "publicMemberPattern" value = "^$" /> </module>
<rule-configuration classname = "com.puppycrawl.tools.checkstyle.checks.VisibilityModifierCheck" severity = "warning"> <config-properties> <config-property name = "packageAllowed" value = "false" /> <config-property name = "protectedAllowed" value = "false" /> <config-property name = "publicMemberPattern" value = "^$" /> </config-properties> </rule-configuration>
<module name = "Visibility Modifier"> <property name = "packageAllowed" value = "false" /> <property name = "protectedAllowed" value = "false" /> </module>
としたとき、以下のようになる。以下の例は、インスタンスフィールドの宣言とする。
OK! private String name; Boo! protected String name; Boo! String name; Boo! public String name;
親モジュール | TreeWalker |
---|---|
実装クラス | com.puppycrawl.tools.checkstyle.checks.FinalClassCheck(3.1) com.puppycrawl.tools.checkstyle.checks.design.FinalClassCheck(3.2) |
Since | 3.1 |
private なコンストラクタしかないクラスがfinal宣言されているかをチェックします。
これは、private なコンストラクタしかないクラスを継承したサブクラスがインスタンス化できないからです。そのため、final宣言することによって、継承できないことを明示します。
<module name = "FinalClass" />
<rule-configuration classname = "com.puppycrawl.tools.checkstyle.checks.FinalClassCheck" severity = "warning"> <config-properties /> </rule-configuration>
親モジュール | TreeWalker |
---|---|
実装クラス | com.puppycrawl.tools.checkstyle.checks.InterfaceIsTypeCheck(3.1) com.puppycrawl.tools.checkstyle.checks.design.InterfaceIsTypeCheck(3.2) |
Since | 3.1 |
定数インターフェイスをチェックします。
参照: Effective Java 第4章 項目17 型を定義するためだけにインタフェースを使用する
プロパティ名 | 型 | デフォルト | 概要 |
allowMarkerInterface | Boolean | true | マーカインターフェイスを許可するかどうか? |
<module name = "InterfaceIstype"> <property name = "allowMarkerInterface" value = "true" /> </module>
<rule-configuration classname = "com.puppycrawl.tools.checkstyle.checks.InterfaceIsTypeCheck" severity = "warning"> <config-properties> <config-property name = "allowMarkerInterface" value = "true" /> </config-properties> </rule-configuration>
親モジュール | TreeWalker |
---|---|
実装クラス | com.puppycrawl.tools.checkstyle.checks.HideUtilityClassConstructorCheck(3.1) com.puppycrawl.tools.checkstyle.checks.design.HideUtilityClassConstructorCheck(3.2) |
Since | 3.1 |
ユーティリティクラス(スタティックメソッドしか持たないクラス)が、パブリックなコンストラクタを持っているかどうかチェックします。
Rationale: ユーティリティクラスをインスタンス化することに意味はない。そのため、コンストラクタは、private か(サブクラス化を考慮して)protected にすべきである。よくあるミスは、デフォルトコンストラクタを隠し忘れること。
<module name = "HideUtilityClassConstructor" />
<rule-configuration classname = "com.puppycrawl.tools.checkstyle.checks.HideUtilityClassConstructorCheck" severity = "warning"> <config-properties /> </rule-configuration>
親モジュール | TreeWalker |
---|---|
実装クラス | com.puppycrawl.tools.checkstyle.checks.DesignForExtensionCheck(3.1) com.puppycrawl.tools.checkstyle.checks.design.DesignForExtensionCheck(3.2) |
Since | 3.1 |
継承できるクラスであればそれを明示するように、継承して欲しくないクラスであればそれを明示するようにするためのチェックをします。
具体的には、以下のようなことを行います。サブクラス化できるクラスの private でもなく static でもないメソッドが以下の条件のどれかを満たしているかをチェックします。
Rationale: この API デザインスタイルは、サブクラスによってスーパークラスが壊されるのを防ぎます。半面、サブクラスは自由度が制限されてしまいます。特に、スーパークラスの実行されるコードを防ぐことができません。しかしこれは、サブクラスがスーパーメソッドを呼ぶのを忘れることによって、スーパークラスの状態を壊すことができないことを意味します。
<module name = "DesignForExtension" />
<rule-configuration classname = "com.puppycrawl.tools.checkstyle.checks.DesignForExtensionCheck" severity = "warning"> <config-properties /> </rule-configuration>
親モジュール | TreeWalker |
---|---|
実装クラス | com.puppycrawl.tools.checkstyle.checks.design.ThrowsCountCheck |
Since | 3.2 |
メソッドからスローされる例外の数をチェックします。
Rationale: 例外はメソッドインターフェイスの一部です。あまりに多くの異なるルートをもった例外をスローするように宣言されたメソッドは、例外捕捉処理が面倒で、catch (Exception) のように悪いプログラミング習慣をもたらします。このチェックは、例外の改装内の最もシンプルなものを宣言することを開発者に強制します。これにより、メソッドの呼び出し側は、ただ1つだけ例外をチェックすればよくなるが、必要ならば特定の(宣言された例外の)サブクラスをキャッチすることもできます。
プロパティ名 | 型 | デフォルト | 概要 |
max | Integer | true | マーカインターフェイスを許可するかどうか? |