Kotlin Data Class次级构造器参数无法访问问题求助
解决Kotlin Data Class次级构造器参数无法访问的问题
问题根源
你当前的代码中,次级构造器的size只是构造器的局部参数,并没有被声明为User类的成员属性。构造器执行完毕后,这个参数就会被销毁,自然无法通过实例访问。
推荐解决方案:用默认参数替代次级构造器
Kotlin支持给主构造器参数设置默认值,这比写次级构造器更简洁,也更符合Data Class的设计特性(自动生成的equals、hashCode、toString、copy方法会包含所有主构造器参数)。
修改后的代码:
data class User(val name: String, val age: Int, val size: String? = null)
实例化时可以灵活选择是否传入size:
fun main(){ // 带size的实例 val userWithSize = User("foo", 5, "M") println(userWithSize.name) println(userWithSize.age) println(userWithSize.size) // 正常输出"M" // 不带size的实例 val userWithoutSize = User("bar", 30) println(userWithoutSize.size) // 输出null }
备选方案:将次级构造器参数转为类属性
如果必须保留次级构造器的写法,需要把size声明为类的成员属性,并在次级构造器中赋值:
data class User(val name: String, val age: Int) { // 声明类属性,默认值为null var size: String? = null constructor(name: String, age: Int, size: String) : this(name, age) { this.size = size } }
注意:这种方式下,Data Class自动生成的方法(如toString、copy)不会包含size,因为它不是主构造器的参数。如果需要这些方法包含size,还是优先用第一种方案。
内容的提问来源于stack exchange,提问作者jake wong
相关产品推荐
相关产品推荐

