S-JIS[2023-09-23/2024-03-22] 変更履歴

無名変数(Java21)

Java21の無名変数(プレビュー版)について。


概要

2023/9/19にリリースされたJava21で、プレビュー版として無名変数が使えるようになった。
すなわち、使用しない変数に「_」が指定できるようになった。


無名変数はJava22で正式機能になった。[2024-03-22]


無名変数はJava21ではプレビュー版の機能なので、この機能を使いたい場合はコンパイル時にjavacコマンドに--enable-previewを付ける必要があり、
また、実行時にjavaコマンドに--enable-previewを付ける必要がある。
JShellで試す場合もjshellコマンドに--enable-previewを付ける。

> javac --enable-preview --release 21 Example.java
> java --enable-preview Example
> java --enable-preview --source 21 Example.java

無名変数「_」の例。

使用箇所
ローカル変数 int _ = 1;
long _ = 2;
for文 for (int i = 0, _ = someInt(); i < 10; i++) {
  System.out.println(i);
}
for each文 var list = List.of("a", "b", "c");
for (var _ : list) {
  System.out.print("+");
}
try-with-resources Closeable c1 = () -> System.out.println("c1.close");
Closeable c2 = () -> System.out.println("c2.close");
try (var _ = c1; var _ = c2) {
}
catchブロック try {
  〜
} catch(Exception _) {
  // ignore
}
ラムダ式の引数 BiFunction<Integer,Integer,Integer> f = (x, _) -> x * 2;
ラムダ式の引数(var) BiFunction<Integer,Integer,Integer> f = (var x, var _) -> x * 2;
insntaceofのパターンマッチング record Point(int x, int y) {}

if (o instanceof Point(var x, _)) {
  System.out.println(x);
}
switchのパターンマッチング switch (o) {
case Point(var x, _):
  System.out.println(x);
  break;
}

プレビュー機能へ戻る / Java目次へ戻る / 新機能へ戻る / 技術メモへ戻る
メールの送信先:ひしだま