如何处理从API接收的数据类中的信息

时间:2019-01-28 11:59:49

标签: json kotlin data-class

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

这是要走的路吗?

1 个答案:

答案 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
}