gpt4 book ai didi

kotlin - 扩展其他(密封)类的数据类中的重复字段?

转载 作者:行者123 更新时间:2023-12-02 12:59:10 25 4
gpt4 key购买 nike

当数据类扩展包含非抽象 open val 属性的密封类时,生成的子数据类包含与父类的私有(private)字段重复的私有(private)字段。

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 的字节码包含自己的私有(private)字段 field1 ;父类中的字段似乎没有被子类重用。

当使用使用反射设置字段的框架时,将设置哪个字段?为什么父类中的字段不被子类重用?有没有办法将父类中字段的可见性更改为 protected所以它可以被子类重用?

最佳答案

该字段未被重用,因为您声明了一个单独的属性,该属性具有自己的支持字段。如果要重用该字段,请将代码更改为:

sealed class Foo(val field1: String? = null)

data class Bar(field1: String? = null) : Foo(field1)

关于kotlin - 扩展其他(密封)类的数据类中的重复字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51899937/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com