LambdaパラメータのJava 11ローカル変数構文

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です。