我是Kotlin的新手,并且找到了很棒的数据类!
因此,我正在使用数据类从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
Ofc,无需更改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".
这是要走的路吗?
答案 0 :(得分:4)
您可以将其他属性混入数据类:
data class UserApi(val name: String, val born: Int) {
val age get() = LocalDate.now().year - born
}
val mikesAge = UserApi("Mike", 1990).age
该属性在每次访问时都会自动计算。
请参见“自定义获取器”示例here。
或者您也可以定义新属性。此属性仅计算一次:
data class UserApi(val name: String, val born: Int) {
val age = LocalDate.now().year - born
}