開発者ドキュメント

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


1前書き

ラムダパラメータのローカル変数の構文は、Java 11で導入された唯一の言語機能です。このチュートリアルでは、この新しい機能を調べて使います。

** 2 Lambdaパラメータのローカル変数構文

**

Java 10で導入された重要な機能の1つはhttps://www.baeldung.com/java-10-local-variable-type-in​​ference[ローカル変数型の推論]です。実際の型の代わりに、ローカル変数の型として

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のこのクールな新機能を調べ、ラムダパラメータにローカル変数の構文を使用する方法を説明しました。

モバイルバージョンを終了