我最近发现了 Java 记录,了解它们的存在和用途真是太神奇了。
但是,我开始怀疑它们本质上是否只是幕后的类。
这是否意味着在编译过程中,它们会被转换为具有最终私有字段、公共构造函数和必要的 getter 的显式类?
java.lang.Record
)。
你可以自己尝试一下:
// test.java
record Test(int foo, String bar) {}
当你用
javac test.java
编译它并用 javap Test
再次反汇编它时,你会得到以下代码:
final class Test extends java.lang.Record {
Test(int, java.lang.String);
public final java.lang.String toString();
public final int hashCode();
public final boolean equals(java.lang.Object);
public int foo();
public java.lang.String bar();
}