これは原始的な質問のように見えるかもしれませんし、これは私が知らない単純なユーティリティライブラリメソッドによって行われるかもしれません。
目標は、2つのオブジェクトの下にネストされているブールフィールドの値をチェックすることです。
_private boolean sourceWebsite(Registration registration) {
Application application = registration.getApplication();
if (application == null) {
return true;
}
Metadata metadata = application.getMetadata();
if (metadata == null) {
return true;
}
Boolean source = metadata.getSource();
if (source == null) {
return true;
}
return !source;
}
_
これは単一のif()
で実行できることを知っています。読みやすくするために、ここに複数のif
を追加しました。
上記のif
ステートメントを簡略化し、親オブジェクトかnullでない場合に_Boolean source
_の値を返す単純なユーティリティクラスを作成する方法はありますか?
Java.util.Optional
このように:
private boolean sourceWebsite(Registration registration) {
return Optional.of(registration)
.map(Registration::getApplication)
.map(Application::getMetadata)
.map(Metadata::getSource)
.map(source -> !source)
.orElse(Boolean.TRUE);
}
つまり、いずれかのゲッターがnullを返した場合はtrue
を返し、!Metadata.source
さもないと。
次のいずれかがnullの場合、trueを返します。すべての値がnullでない場合、!source
を返します。
private boolean sourceWebsite(Registration registration) {
return registration.getApplication() == null
|| registration.getApplication().getMetadata() == null
|| registration.getApplication().getMetadata().getSource() == null
|| !registration.getApplication().getMetadata().getSource();
}
更新:
すべてのゲッターが2回以上呼び出されないようにしたい場合は、次のようにすべてのオブジェクトの変数を宣言できます。
private boolean sourceWebsite(Registration registration) {
Application application;
Metadata metadata;
Boolean source;
return (application = registration.getApplication()) == null
|| (metadata = application.getMetadata()) == null
|| (source = metadata.getSource()) == null
|| !source;
}
使用できる別のオプションは、try-catchブロックです。 nullポインタ例外が発生した場合はtrueを返します。
private boolean sourceWebsite(Registration registration) {
try {
return !registration.getApplication().getMetadata().getSource();
}
catch (NullPointerException e) {
return true;
}
}