4.16. 無名パターンと変数 (プレビュー)
Red Hat build of OpenJDK 21 では、無名パターンと変数が導入されています。これは、Java プログラミング言語を強化するプレビュー機能です。
- 無名パターン は、コンポーネントの名前またはタイプを指定せずにレコードコンポーネントと一致します。無名パターンは、不要なネストされたパターンを省略することで、レコードパターンの読みやすさを向上させるのに役立ちます。
-
無名変数 は初期化できますが、使用することはできません。無名変数は、宣言する必要がある変数 (たとえば、
catch
句内) が使用されていない変数を識別することにより、すべてのコードの保守性を向上させるのに役立ちます。
無名パターンと無名変数は、アンダースコア (_
) 文字を使用して表すことができます。変数が関連がなく、使用されない場合は、変数に名前を付ける必要はありません。このような状況では、アンダースコア文字を使用して、変数は存在するが使用されていないことを指定できます。
次の lambda 式の例では、パラメーターは関係がないため、JVM はこのパラメーターの変数を作成する必要がありません。
...stream.collect(Collectors.toMap(String::toUpperCase, _ -> "NODATA"))
...stream.collect(Collectors.toMap(String::toUpperCase, _ -> "NODATA"))
次の switch
ステートメントの例では、変数は 大文字と小文字
が一致する必要がありますが、これらの変数は使用されません。
switch (b) { case Box(RedBall _), Box(BlueBall _) -> processBox(b); case Box(GreenBall _) -> stopProcessing(); case Box(_) -> pickAnotherBox(); }
switch (b) {
case Box(RedBall _), Box(BlueBall _) -> processBox(b);
case Box(GreenBall _) -> stopProcessing();
case Box(_) -> pickAnotherBox();
}
前の例では、最初の 2 つのケースでは、右側で Box
レコードのコンポーネントが使用されないため、無名パターン変数が使用されています。3 番目のケースは新しいもので、無名パターンを使用して、Box
レコードを null コンポーネントと一致させます。
詳細は、JEP 443: Unnamed Patterns and Variables (Preview) を参照してください。