gui*_*792 22 java record java-record
我最近发现了 Java记录,了解它们的存在和用途真是太神奇了。
然而,我开始怀疑它们是否本质上只是幕后的类。
这是否意味着在编译过程中,它们会被转换为具有最终私有字段、公共构造函数和必要的 getter 的显式类?
cvk*_*cvk 37
在幕后它仍然会创建一个类(派生自java.lang.Record)。
你可以自己尝试一下:
// test.java
record Test(int foo, String bar) {}
Run Code Online (Sandbox Code Playgroud)
当您使用 编译它并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();
}
Run Code Online (Sandbox Code Playgroud)