11、Java 21 新特性 - 未命名模式和变量(预览)

使用未命名模式和未命名变量来增强Java语言,未命名模式匹配记录组件而不说明组件的名称或类型,未命名变量可以初始化但不使用。两者都用下划线字符_表示。这是一个预览语言功能。

作为预览功能引入,未命名模式匹配一个记录组件,但不声明组件的名称或类型。未命名变量是可以初始化但不使用的变量,都可以使用下划线字符 (_) 来表示它们。

例如:

try {

     int number = Integer.parseInt(string);
    } catch (NumberFormatException e) {

        System.err.println("Not a number");
    }

其中e 是未使用的变量,可以写成

try {

 
        int number = Integer.parseInt(string);
    } catch (NumberFormatException _) {

 
        System.err.println("Not a number");
    }

再如

Object object = null;
if (object instanceof Points(int x, int y)) {


    System.out.println("object is a position, x = " + x);
}

其中y 是未使用的变量,可以写成

Object object = null;
if (object instanceof Points(int x, int _)) {


    System.out.println("object is a position, x = " + x);
}

switch 表达式中也可以有类似的用法,例如

Object obj = null;
switch (obj) {


    case Byte    b -> System.out.println("Integer number");
    case Short   s -> System.out.println("Integer number");
    case Integer i -> System.out.println("Integer number");
    case Long    l -> System.out.println("Integer number");

    case Float  f -> System.out.println("Floating point number");
    case Double d -> System.out.println("Floating point number");

    default -> System.out.println("Not a number");
}

也可以写成

Object obj = null;
switch (obj) {


    case Byte    _ -> System.out.println("Integer number");
    case Short   _ -> System.out.println("Integer number");
    case Integer _ -> System.out.println("Integer number");
    case Long    _ -> System.out.println("Integer number");

    case Float  _ -> System.out.println("Floating point number");
    case Double _ -> System.out.println("Floating point number");

    default -> System.out.println("Not a number");
}