如何避免重复覆盖 kotlin 中的字段
How to avoid of duplication overriding fields in kotlin
继承对象创建新字段而不是 Override
。
假设 CredentialMessage
从 Message
延伸
open class Message(
@SerializedName("l") open val label: String
){
override fun toString(): String {
return label
}
}
class CredentialMessage(
@Transient override val label: String,
@SerializedName("u") open val userName: String,
@SerializedName("p") open val password: String
): Message("\uD83D\uDD12" + label) //
CredentialMessage
的简单示例如下所示
val message = CredentialMessage("Barev","user","pass")
当我打印消息标签而不是 "Barev" 时,我得到了 "Barev"
println(message.label) // "Barev"
调试显示有两个标签。
第一个是label
,第二个是Message.label
并且无法访问 Message.label
反编译现有源代码后,我找到了答案。
override
关键字生成完全相同的字段。删除 override
关键字后问题解决了。
class CredentialMessage(
label: String,
@SerializedName("u") open val userName: String,
@SerializedName("p") open val password: String
): Message("\uD83D\uDD12" + label) //
继承对象创建新字段而不是 Override
。
假设 CredentialMessage
从 Message
open class Message(
@SerializedName("l") open val label: String
){
override fun toString(): String {
return label
}
}
class CredentialMessage(
@Transient override val label: String,
@SerializedName("u") open val userName: String,
@SerializedName("p") open val password: String
): Message("\uD83D\uDD12" + label) //
CredentialMessage
的简单示例如下所示
val message = CredentialMessage("Barev","user","pass")
当我打印消息标签而不是 "Barev" 时,我得到了 "Barev"
println(message.label) // "Barev"
调试显示有两个标签。
第一个是label
,第二个是Message.label
并且无法访问 Message.label
反编译现有源代码后,我找到了答案。
override
关键字生成完全相同的字段。删除 override
关键字后问题解决了。
class CredentialMessage(
label: String,
@SerializedName("u") open val userName: String,
@SerializedName("p") open val password: String
): Message("\uD83D\uDD12" + label) //