【发布时间】:2022-11-13 14:04:42
【问题描述】:
我正在 kotlin 中创建一个数据类
data class User(val name: String, val age: Int)
{
constructor(name: String, age: Int, size: String): this(name, age) {
}
}
在我的主要功能中,我可以这样访问对象:
fun main(){
val x = User("foo", 5, "M")
println(x.name)
println(x.age)
println(x.size) // does not work
}
我的问题是我无法访问size。
我想要做的是,创建一个data class,其中顶级参数是将被访问的常见项目,并且在构造函数中,具有适合某些情况的附加参数。目的是让我可以做类似的事情
// something along the lines of
if (!haveSize()){
val person = User("foo", 5, "M")
} else {
val person = User("foo", 5)
}
}
有任何想法吗?
【问题讨论】:
-
size不是User的属性,它只是一个构造函数参数。它不存在于构造函数之外,因此如果它是一个属性,您将无法访问它。应该是财产吗? -
使用默认参数值是否无法实现您的目标?例如:数据类 User(val name: String, val age: Int, val size: String? = null )
-
您好,感谢您的回复 - 但我意识到我的问题和代码没有准确描述我的问题陈述。我编辑了它。你能看看吗?
-
您不能使用默认参数值实现您的目标吗?例如:数据类 User(val name: String, val detailsOne: OneDetails? = null, val detailsTwo: TwoDetails? = null ) ?然后你可以这样说: "1" -> anotherCaller(User(mt, detailsOne = one))
-
不,我不能。因为
OneDetails和TwoDetails将传入不同类型的值。所以我想我想看看是否可以在数据类上执行overloading。
标签: kotlin data-class