Checkstyleチェック項目:Modifiers
ver 10.3.1
ClassMemberImpliedModifier
クラスおよびレコードのネストされた型に対する暗黙の修飾子をチェックする。
クラスやレコードのネストされた型の修飾子をチェックし、特定の修飾子が実際には冗長であっても明示的に指定されていることを確認する。
プロパティ
プロパティ | 型 | デフォルト値 | 説明 |
---|---|---|---|
violateImpliedStaticOnNestedEnum | boolean | true | クラスやレコードのネストされたenumに対して static を明示的にコード化することを強制するかどうか |
violateImpliedStaticOnNestedInterface | boolean | true | クラスやレコードのネストしたインターフェースにstaticを明示的にコード化することを強制するかどうか |
violateImpliedStaticOnNestedRecord | boolean | true | クラスやレコードのネストしたレコードにstaticを明示的にコード化することを強制するかどうか |
チェック設定例
プロパティ設定なし
<module name="ClassMemberImpliedModifier" />
プロパティ設定あり
<module name="ClassMemberImpliedModifier"> <property name="violateImpliedStaticOnNestedEnum" value="false"/> <property name="violateImpliedStaticOnNestedInterface" value="false"/> <property name="violateImpliedStaticOnNestedRecord" value="false"/> </module>
チェック実行例
プロパティ設定なし
public final class Person { // OK static interface Address1 { } // NG staticを明示的に記述する interface Address2 { } // OK static enum Age1 { CHILD, ADULT } // NG staticを明示的に記述する enum Age2 { CHILD, ADULT } // OK public static record GoodRecord() {} // NG staticを明示的に記述する public record BadRecord() {} }
プロパティ設定あり
public final class Person { // OK static interface Address1 { } // OK 「violateImpliedStaticOnNestedInterface=false」なのでstaticの記述は強制ではない interface Address2 { } // OK static enum Age1 { CHILD, ADULT } // OK 「violateImpliedStaticOnNestedEnum=false」なのでstaticの記述は強制ではない enum Age2 { CHILD, ADULT } // OK public static record GoodRecord() {} // OK 「violateImpliedStaticOnNestedRecord=false」なのでstaticの記述は強制ではない public record BadRecord() {} }
InterfaceMemberImpliedModifier
インターフェイスメンバーとネストされた型に対する暗黙の修飾子をチェックする。
インターフェイスメンバーの修飾子をチェックし、特定の修飾子が実際には重複しているにもかかわらず明示的に指定されていることを確認する。
プロパティ
プロパティ | 型 | デフォルト値 | 説明 |
---|---|---|---|
violateImpliedPublicField | boolean | true | インターフェイスフィールドに明示的にpublicがコード化されていることを強制するかどうか |
violateImpliedStaticField | boolean | true | インターフェイスフィールドにstaticを明示的にコード化することを強制するかどうか |
violateImpliedFinalField | boolean | true | インターフェイスフィールドに明示的にfinalをコード化することを強制するかどうか |
violateImpliedPublicMethod | boolean | true | インターフェイスメソッドに明示的にpublicを記述することを強制するかどうか |
violateImpliedAbstractMethod | boolean | true | インターフェイスメソッドに abstract を明示的にコード化することを強制するかどうか |
violateImpliedPublicNested | boolean | true | インターフェイスのネストした型に public を明示的にコード化することを強制するかどうか |
violateImpliedStaticNested | boolean | true | インターフェイスのネストされた型に staticを明示的にコード化することを強制するかどうか |
チェック設定例
プロパティ設定なし
<module name="InterfaceMemberImpliedModifier"/>
プロパティ設定あり
<module name="InterfaceMemberImpliedModifier"> <property name="violateImpliedPublicField" value="false"/> <property name="violateImpliedStaticField" value="false"/> </module>
チェック実行例
プロパティ設定なし
public interface AddressFactory { // OK public static final String UNKNOWN = "Unknown"; // NG 明示的にpublic static finalと記述する String OTHER = "Other"; // OK public static AddressFactory instance(); // OK public abstract Address createAddress(String addressLine, String city); // NG 明示的にpublic abstractと記述する List<Address> findAddresses(String city); // NG 明示的にpublic staticと記述する interface Address { // NG 明示的にpublic static finalと記述する String getCity(); } }
プロパティ設定あり
public interface AddressFactory { // OK public static final String UNKNOWN = "Unknown"; // OK 「violateImpliedPublicField=false」なのでpublicの記述は強制ではない // OK 「violateImpliedStaticField=false」なのでstaticの記述は強制ではない String OTHER = "Other"; // OK public static AddressFactory instance(); // OK public abstract Address createAddress(String addressLine, String city); // NG 明示的にpublic abstractと記述する List<Address> findAddresses(String city); // NG 明示的にpublic staticと記述する interface Address { // NG 明示的にpublic static finalと記述する String getCity(); } }
ModifierOrder
修飾子の順序がJava言語仕様に準拠しているかをチェックする。
正しい順序は以下の通り。
- public
- protected
- private
- abstract
- default
- static
- sealed
- non-sealed
- final
- transient
- volatile
- synchronized
- native
- strictfp
プロパティ
なし
チェック設定例
<module name="ModifierOrder"/>
RedundantModifier
冗長な修飾子をチェックする。
チェック内容は以下の通り
- インターフェースとアノテーションの定義
- finalクラスおよび匿名クラスのメソッドに対するfinal修飾子
- publicまたはstaticと宣言されたインターフェースの下にネストされた型宣言
- クラスのコンストラクタ
- staticと宣言されたenumの定義を入れ子にしたもの
- Finalと宣言されたレコード定義と、staticと宣言されたネストされたレコード定義
プロパティ
プロパティ | 型 | デフォルト値 | 説明 |
---|---|---|---|
tokens | トークンの サブセット | METHOD_DEF, VARIABLE_DEF, ANNOTATION_FIELD_DEF, INTERFACE_DEF, CTOR_DEF, CLASS_DEF, ENUM_DEF, RESOURCE, ANNOTATION_DEF, RECORD_DEF | チェック対象のトークン |
〇トークンのサブセットには以下が設定可能
トークン | 説明 |
---|---|
METHOD_DEF | メソッド宣言 |
VARIABLE_DEF | フィールドまたはローカル変数の宣言 |
ANNOTATION_FIELD_DEF | アノテーションフィールドの宣言 |
INTERFACE_DEF | インターフェイス宣言 |
CLASS_DEF | クラス宣言 |
CTOR_DEF | コンストラクター宣言 |
ENUM_DEF | 列挙型宣言 |
ANNOTATION_DEF | アノテーション宣言 |
RECORD_DEF | レコード宣言 |
RESOURCE | try-with-resources |
チェック設定例
プロパティ設定なし
<module name="RedundantModifier"/>
プロパティ設定あり
<module name="RedundantModifier"> <property name="tokens" value="CLASS_DEF"/> </module>
チェック実行例
プロパティ設定なし
public interface MyInterface { // NG public abstract void foo(); }
プロパティ設定あり
public interface MyInterface { // OK メソッド宣言はチェック対象外 public abstract void foo(); }