Как обрабатывать информацию в классах данных, полученных из API

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

Конечно, не меняя API, я просто хотел бы получить неизменное значение, например:

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 ответ

Решение

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

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

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

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

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

data class UserApi(val name: String, val born: Int) {
  val age = LocalDate.now().year - born
}
Другие вопросы по тегам