Flex Gateway新着情報
Governance新着情報
Monitoring API Managerユーザーがパラメーターの値を指定していないときでも @Parameter をインスタンス化する必要がある場合があります。次に例を示します。
@Parameter
@Optional
private List<Integer> numbers;
numbers をコードで操作する場合は、NullPointerException を発生させないようにするために、どこかで numbers == null のチェックが必要です。
SDK は null の代わりに空のリストを提供する @NullSafe などのアノテーションの使用をサポートしています。これを使用すると、SDK は値が指定されていない場合には自動的に値を作成します。
次の サンプルコードは、List インターフェースに @NullSafe を使用します。
@NullSafe アノテーションにはいろいろな種類があります。List インターフェースや Map インターフェースと一緒に使用すると、@NullSafe はこれらのコレクションのデフォルト実装を作成します。
次の例では、POJO を null safe 型としています。
@Parameter
@Optional
@NullSafe
private Foo foo;
ご推察のとおり、SDK は Foo をインスタンス化して、foo パラメーターに割り当てることで、手動での null チェックを不要にします。
@NullSafe を POJO で使用する場合は、POJO 内で宣言するすべてのパラメーターを省略可能とする必要があります。SDK は、必須パラメーターのデフォルト値を作成できません。そのため、@NullSafe を使用して必須パラメーターを自動的にインスタンス化することは無意味です。
パラメーターの型を使用する代わりに、特定のクラスをインスタンス化するように @NullSafe を設定することもできます。これは、パラメーターの型をインスタンス化できない場合 (抽象クラスやインターフェースなど) に便利です。
インスタンス化するクラスは、アノテーションで defaultImplementingType 属性を設定することで指定します。次に例を示します。
@Parameter
@Optional
@NullSafe(defaultImplementingType = Foo.class)
private AbstractFoo foo;