record
这让我感到意外:即使它现在已成为关键字,我也能够使用该名称声明一个变量。看看这个:
public class Main {
static class Foo {
void bar() { System.out.println("Foo.bar"); }
}
record R (int a) {}
public static void main(String[] args) {
Foo record = new Foo();
record.bar();
R r = new R(5);
System.out.println(r);
}
}
当使用 Java 17 编译和运行时,这会给出:
Foo.bar
R[a=5]
我曾预计这会导致错误,就像尝试声明名为class
. 正如我认识的 Java 人一样,他们非常小心地不破坏现有代码,所以我认为这可能是一个深思熟虑的选择。
(你甚至不能声明一个名为的变量const
,因为它const
是Java 中的一个关键字。)