Javaの8オプションでヌルチェックを交換します

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 */);

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=173048&siteId=1