1前書き
ラムダパラメータのローカル変数の構文は、Java 11で導入された唯一の言語機能です。このチュートリアルでは、この新しい機能を調べて使います。
** 2 Lambdaパラメータのローカル変数構文
**
Java 10で導入された重要な機能の1つはhttps://www.baeldung.com/java-10-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は上記の構文をサポートすることによってこれに対処します。
これにより、ローカル変数とラムダパラメータの両方で
var
uniformが使用されます。
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のこのクールな新機能を調べ、ラムダパラメータにローカル変数の構文を使用する方法を説明しました。