型アノテーションを使用したChecker Frameworkは、複数のチェッカーから構成されています。その中でも最も代表的なチェッカーであるNullness Checkerを、前回、紹介しました。

 しかし、それ以外にも有用なチェッカーが提供されています。そこで、今回は使えるチェッカーを紹介していきます。今回、紹介するチェッカーを以下に示します。

  • Initialization Checker
  • Interning Checker
  • Regex Checker

 それぞれのチェッカーは独立しているので、必要なチェッカーだけを使用できます。解説も別個になっていますので、どこから読んでも大丈夫です。

Initialization Checker

 前回のNullness Checkerの解説で、@NonNullなメソッド引数にnullを指定してしまうというサンプルを示しました。リスト1にそのサンプルを再掲します。

リスト1●コンパイルエラーになる例

public @NonNull String sayHelloTo(@NonNull String person) {
    return "Hello, " + person + "!";
}

public void test() {
    Greeting greeting = new Greeting();

    greeting.sayHelloTo(null);
}

 このコードに対し、Nullness Checkerを実行すると以下のようなコンパイルエラーが表示されます。

C:\demo\src\Greeting.java:14: エラー: [argument.type.incompatible] incompatible types in argument.
    greeting.sayHelloTo(null);
  found   : null
  required: @Initialized @NonNull String
エラー1個

 着目していただきたいのが、requiredの項です。ここには、sayHelloToメソッドの引数personの対して、要求されている型を示しています。@NonNull Stringはいいのですが、その前に指定していないはずの@Initialziedというアノテーションが記述されています。

 このアノテーションこそがInitialization Checkerで定義しているアノテーションです。

 Initialziation Checkerはオブジェクトの初期化に関するチェッカーです。オブジェクトの初期化はnullとの関連が深いため、Nullness Checkerと一緒に実行されます。逆にいうと、Initialziation Checkerだけを単独では実行できません。

 また、Nullness Checkerでは@NonNullアノテーションがデフォルトになっていましたが、Initialization Checkerでは@Initializedアノテーションがデフォルトになっています。このため、リスト1のsayHelloToメソッドの引数の型が@Initialized @NonNull Stringとなっていたのです。

この先は会員の登録が必要です。有料会員(月額プラン)は登録月無料!

日経 xTECHには有料記事(有料会員向けまたは定期購読者向け)、無料記事(登録会員向け)、フリー記事(誰でも閲覧可能)があります。有料記事でも、登録会員向け配信期間は登録会員への登録が必要な場合があります。有料会員と登録会員に関するFAQはこちら