kotlin - 通过辅助构造函数初始化 Kotlin 数据类的 val 属性
问题描述
class Animal {
val name: String
constructor(name: String){
this.name = name // initialized via constructor
}
}
对于上面的类,Kotlin
我可以通过辅助构造函数初始化val属性,但Data 类不允许这样做
data class User(val name: String, val postalCode: Int) {
val email: String
constructor( email: String): this("", 1){
this.email = email // error: value can not be reassigned
}
}
我无法理解的是,电子邮件属性在哪里已经初始化,因为我没有声明任何初始化?
解决方案
如果你的类有一个主构造函数,你必须“在主构造函数中”初始化它的所有属性——或者在它们的声明中直接初始化它们:
val email = "foo@bar.com"
或者在初始化块中:
val email: String
init {
email = "foo@bar.com"
}
编译器强制您将所有辅助构造函数调用转发给主构造函数,并且由于主构造函数已经必须初始化类内的所有属性(否则调用它会构造一个部分初始化的实例,就像在您的代码示例中一样),它在辅助构造函数的主体中也初始化它们是没有意义的,尤其是对于val
不能重新分配的 a 。
推荐阅读
- c - 为什么 for 循环仅运行 4 次后终止?
- android - 在 NativeScript android 应用程序中获取包名称?
- python - 如何从 hkl 或任何保存的 keras 配置中重建 keras 模型?
- c# - 如何从 C# 中的 lambda 表达式中删除列表项?
- r - 将多个值字段转换为因子
- d3.js - 当值范围更改时,d3 更新条的“宽度”属性不起作用
- java - 递归 Java 与 Python
- go - 如何在 Buffalo 中执行原始 SQL?
- java - 字符串到 LocalDateTime 的转换:java.time.format.DateTimeParseException
- plugins - chartjs-plugin-streaming + chartjs-plugin-zoom