0

の使い方が気になりますOptional

次のコード スニペットでは、

public List<Some> read(
    @QueryParam("first_result") @Min(0)
    final Integer firstResult,
    @QueryParam("max_results") @Min(0)
    final Integer maxResults) {

    // ...

    if (firstResult != null) {
        query.setFirstResult(firstResult);
    }

    // ...
}

このようにコードを変更すると、

ofNullable(firstResult).ifPresent(v -> query.setFirstResult(v));
  • 質問 1:ofNullable明らかに冗長なオブジェクトを作成しますか?
  • 質問 2: 定型コードを避ける価値はありますか?
  • 質問 3: この質問は時期尚早の最適化について話しているのですか?
4

2 に答える 2

3
  1. はい
  2. それは意見の問題です。個人的には、if ブロックを使用したコードの方が読みやすく、あまり冗長ではありません。
  3. はい。有効期間が短い Optional オブジェクトを作成するコストは、特に JPA クエリを実行する場合と比較して、ごくわずかです。したがって、オプション ベースのコードの方が読みやすく、洗練されている場合は、パフォーマンスについて心配する必要はありません。
于 2015-10-20T22:05:33.113 に答える
1

もう一つは、そもそもならないことですので、チェックしなくて済むし、簡単なミスも防げfirstResultますnull

どうやってするの?ここにいくつかのオプションがあります:

  • がメソッドの結果である場合firstResult、絶対に戻らないことが保証されている方法でそのメソッドをコーディングしますnull(それを確認するための単体テストを追加します)。

  • フィールドのタイプを から に変更しますIntegerOptional<Integer>これにより、このフィールドがオプションであり、使用する前に確認する必要があることが読者に明確になります。

  • に書き込むメソッドの戻り値の型を を返すように変更し、firstResultそのOptional<Integer>メソッドを で終了しreturn Optional.ofNullable(result)ます。このようにして、結果を受け取るコードは、フィールドに格納する前に戻り値をチェックして、値が にならないようにする必要がありますnull

他の方法があるかもしれません。

于 2015-10-20T22:23:01.600 に答える