我最近发现了Java records,了解它们的存在和用途是令人惊讶的.
然而,我开始怀疑,它们本质上是否只是幕后的课程.
这是否意味着在编译过程中,它们会被转换为一个显式类,带有最终的私有字段、公共构造函数和必要的getter?
我最近发现了Java records,了解它们的存在和用途是令人惊讶的.
然而,我开始怀疑,它们本质上是否只是幕后的课程.
这是否意味着在编译过程中,它们会被转换为一个显式类,带有最终的私有字段、公共构造函数和必要的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();
}