当数据类扩展一个包含非抽象 open val 属性的密封类时,生成的子数据类包含与父类的私有字段重复的私有字段。
sealed class Foo(open val field1: String? = null)
data class Bar(override val field1: String? = null) : Foo(field1)
输出javap -p Foo.class
:
public abstract class com.example.Foo {
private final java.lang.String field1;
public java.lang.String getField1();
private com.example.Foo(java.lang.String);
com.example.Foo(java.lang.String, int, kotlin.jvm.internal.DefaultConstructorMarker);
public com.example.Foo(java.lang.String, kotlin.jvm.internal.DefaultConstructorMarker);
}
并且javap -p Bar.class
:
public final class com.example.Bar extends com.example.Foo {
private final java.lang.String field1;
public java.lang.String getField1();
public com.example.Bar(java.lang.String);
public com.example.Bar(java.lang.String, int, kotlin.jvm.internal.DefaultConstructorMarker);
public com.example.Bar();
public final java.lang.String component1();
public final com.example.Bar copy(java.lang.String);
public static com.example.Bar copy$default(com.example.Bar, java.lang.String, int, java.lang.Object);
public java.lang.String toString();
public int hashCode();
public boolean equals(java.lang.Object);
}
的字节码Bar.class
包含自己的私有字段field1
;父类中的字段似乎没有被子类重用。
当使用使用反射设置字段的框架时,将设置哪个字段?为什么父类中的字段不被子类重用?有没有办法改变父类中字段的可见性,protected
以便子类可以重用它?