springenthusiast:
私は、オプションでコードブロックの下に置き換えるしようとしています、だけでチェックするなど、パフォーマンスか何かのようにこれを行うのいずれかの悪い意味合いがあるでしょうしたいですか?
既存のコード:
UserObj userObj=new UserObj();
Object result = fetchDetails();
if (null != result) {
userObj.setResult(result.toString());
}
Javaの8付Optional
:
UserObj userObj=new UserObj();
Optional.ofNullable(fetchDetails()).ifPresent(var -> userObj.setResult(var.toString()));
ヌルチェックブロックの多くは私のコードであるとして単にコードの外観の簡潔を作るために、この変更を行います。
ETO:
まず第一に、私は、あなたがの目的を誤解していると思いますOptional
。これは、交換のためだけのものではありません
if(obj != null){ ... }
主なポイントは、Optional
戻り値がないことを示す値を返す関数のための手段を提供することです。お読みくださいこの記事を詳細については。
適切な使用Optional
あなたのケースでは、オプションを返すことになるResultObj
から、fetchDetails
方法:
Optional<ResultObj> fetchDetails() {
...
}
そして、あなたは単にフェッチのメソッドをチェーンOptional
あなたが前に行ったように。
更新
ケースでは、変更することはできませんfetchDetails
、次のような独自のメソッドにそれを包むのオプションがまだあります。
Optional<ResultObj> fetchOptionalDetails() {
return Optional.ofNullable(fetchDefails());
}
新しいメソッドを作成すると、小さなオーバーヘッドが追加されますが、コードは非常に読みやすくなります。
fetchOptionalDetails().ifPresent(details -> /* do something */);