我是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
}

08-18 01:37
查看更多