Как обрабатывать информацию в классах данных, полученных из API - PullRequest
0 голосов
/ 28 января 2019

Я новичок в 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".

Что-то вроде этого, путь?

1 Ответ

0 голосов
/ 28 января 2019

Вы можете добавить в свой класс данных дополнительное свойство:

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

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

Это свойство будет автоматически рассчитываться при каждом обращении к нему.
См. Пример "пользовательского получателя" здесь .

Или вы можете просто определить новое свойство.Это свойство будет рассчитано только один раз:

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