1

我是 Kotlin 的新手,发现了很棒的数据类!

因此,我使用数据类从 JSON API 获取一些信息,但我想在使用数据之前处理数据以节省一些时间/处理能力。

为了使事情更容易,我将举例说明一个简单的例子:

data class UserApi(val name: String, val born: Int)

正如我所说,我从 JSON API 接收数据,但以编程方式创建用户看起来像这样:

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".

这样的事情要走吗?

4

1 回答 1

4

您可以将其他属性混合到您的数据类中:

data class UserApi(val name: String, val born: Int) {
  val age get() = LocalDate.now().year - born
}

val mikesAge = UserApi("Mike", 1990).age

每次访问时都会自动计算此属性。请参阅此处
的“自定义 getter”示例。

或者您可以只定义新属性。此属性将仅计算一次:

data class UserApi(val name: String, val born: Int) {
  val age = LocalDate.now().year - born
}
于 2019-01-28T12:06:48.727 回答