LambdaパラメーターのJava 11ローカル変数構文
1. 前書き
ラムダパラメータのローカル変数構文は、Java 11で導入された唯一の言語機能です。 このチュートリアルでは、この新機能を調べて使用します。
2. ラムダパラメーターのローカル変数構文
Java 10で導入された重要な機能の1つは、local variable type inferenceでした。 これにより、実際の型ではなく、ローカル変数の型としてvarを使用できるようになりました。 コンパイラーは、変数に割り当てられた値に基づいて型を推測しました。
ただし、ラムダパラメーターではこの機能を使用できませんでした。 たとえば、次のラムダを考えます。 ここで、パラメーターのタイプを明示的に指定します。
(String s1, String s2) -> s1 + s2
パラメータタイプをスキップして、ラムダを次のように書き換えることができます。
(s1, s2) -> s1 + s2
Java 8でもこれをサポートしていました。 これをJava 10で論理的に拡張すると、次のようになります。
(var s1, var s2) -> s1 + s2
ただし、Java 10はこれをサポートしていません。
Java 11は、上記の構文をサポートすることでこれに対処します。 This makes the usage of var uniform in both local variables and lambda parameters.
3. メリット
単純に型をスキップできるのに、ラムダパラメーターにvarを使用したいのはなぜですか?
均一性の利点の1つは、簡潔さを失うことなく、修飾子をローカル変数とラムダフォーマルに適用できることです。 たとえば、一般的な修飾子は型注釈です。
(@Nonnull var s1, @Nullable var s2) -> s1 + s2
タイプを指定せずにそのような注釈を使用することはできません。
4. 制限事項
ラムダでvarを使用することにはいくつかの制限があります。
たとえば、一部のパラメータにvarを使用したり、他のパラメータをスキップしたりすることはできません。
(var s1, s2) -> s1 + s2
同様に、varを明示的なタイプと混在させることはできません。
(var s1, String s2) -> s1 + s2
最後に、単一パラメーターlambdaの括弧をスキップできますが:
s1 -> s1.toUpperCase()
varの使用中は、それらをスキップできません。
var s1 -> s1.toUpperCase()
上記の3つの使用法はすべて、コンパイルエラーになります。
5. 結論
この簡単な記事では、Java 11のこのクールな新機能を調べ、ラムダパラメーターにローカル変数構文を使用する方法を説明しました。
いつものように、例は利用可能なover on GitHubです。