web-dev-qa-db-ja.com

Java 11:Lambdaパラメーターのローカル変数構文-アプリケーション

一般的には Java-11 に興味がありますが、具体的には JEP:32 Lambda操作変数にvar宣言を追加する予定です。

この機能の背後にある動機はうまく議論されています ここ 。記事からの次の引用を検討してください。

// #1 - Legal
ITest divide = (@ATest var x, final var y) ->  x / y;
/* #2 Modifiers on Old-Style implicit paramaters => Illegal */
ITest divide = (@ATest x, final y) ->  x / y;

最終的な修飾子の使用法は私には明らかであり、不変性のベストプラクティスに沿っています。

ただし、注釈についてはよくわかりません。ラムダ暗黙パラメーターに注釈を付けることができることの大きな利点は何ですか?

ラムダ操作変数でアノテーションを使用する事実上の有益な例を提供できますか?意見の問題ではなく、この機能を使用するときに、より読みやすく効率的なコードの実際の例として。

14
Rann Lifshitz

ラムダ暗黙パラメーターに注釈を付けることができることの大きな利点は何ですか?

ラムダステートメント内でのアノテーションの使用法は、非ラムダステートメントの他の属性と同様である必要があります。これは、以下を利用することである可能性があります。

  • 実行時に注釈付きオブジェクトに関する情報を反映して推測します。
  • また、コンパイル時に、生成されたソースコードやその他のツールのヒントなどの動作を表現します

JEP-32自体に記載されているユースケース(それはあなたが楽しみにしていることです)-

_(@Nonnull var x, @Nullable var y) -> x.process(y)
_

ここで、ライブラリは注釈を使用して、xおよびyの値チェックを決定できます。その中で、x.process(y)は確かにNullPointerExceptionをスローできないことを知っていますxの明示的なnullチェックを行わずにラムダパラメーター。

特に、これは、暗黙的に型指定されたラムダ式の仮パラメーターにvarを許可する均一性をもたらす利点の1つです。

7
Naman