我是Kotlin的新手,并且找到了很棒的Data Class!
因此,我正在使用数据类从JSON API中获取一些信息,但是我想先处理数据,然后再使用它来节省时间/处理能力。
为了使事情变得容易,我将举一个简单的例子:
data class UserApi(val name: String, val born: Int)
就像我说的那样,我从JSON API接收数据,但是以编程方式创建User的过程如下所示:
val userApi: UserApi = UserApi("Catelyn", 1990)
现在,不用通过以下方式来计算用户的年龄:
"currentYear - userApi.born" // Calculating an approximate age
在不更改API的情况下,我想获得一个不可变的val,如下所示:
userApi.age
这可能吗?
我在想类似的东西:
interface UserApi {
val name: String
val born: Int
}
data class User(override val name: String, override val born: Int) : UserApi {
// Calculating an approximate age
val age: Int = "currentYear - userApi.born"
}
val user: User = User("Catelyn", 1990) // Or get the data from an API.
// Getting the age of the User like this:
user.age // Same as "currentYear - userApi.born".
这样的事情走吗?
最佳答案
您可以将其他属性混入数据类:
data class UserApi(val name: String, val born: Int) {
val age get() = LocalDate.now().year - born
}
val mikesAge = UserApi("Mike", 1990).age
每次访问该属性都会自动计算。
请参见“自定义 getter ”示例here。
或者,您可以只定义新属性。此属性仅计算一次:
data class UserApi(val name: String, val born: Int) {
val age = LocalDate.now().year - born
}