tgoop.com/android_live/657
Last Update:
Для чего нужны value классы?
#kotlin
Начиная с версии 1.5, в Kotlin появились value-классы. На первый взгляд, это новая функциональность, однако, по сути, она заменяет собой уже известные нам inline-классы, которые, в отличии от inline-функций не встраивались в код. Чтобы избежать этой путаницы, теперь их вывели в отдельную сущность и сделали value-классами.
Чтобы понять, для чего нам нужны эти классы, можно воспользоваться примером из статьи.
Допустим, у нас есть фукнция, которая на вход принимает параметр в виде duration для показа какого-то сообщения с задержкой:fun showTooltip(message: String, duration: Long) { ... }
Сходу непонятно, передавать этот параметр в секундах или в миллисекундах. И даже если переименовать параметр в durationInMillis
и добавить описание функции, всё равно есть риск допустить ошибку.
Хорошим решением здесь является создание обёртки, которая заставит явно указать единицы измерения. Например:class Duration private constructor (
val millis: Long
) {
companion object {
fun millis(millis: Long) = Duration(millis)
fun seconds(seconds: Long) = Duration(seconds * 1000)
}
}
В этом случае мы спокойно можем модифицировать нашу функцию, чтобы принимать на вход Duration
, а дальше создавать нужную нам задержку. Проблема в том, что каждый раз будет создаваться объект и тратиться лишняя память. Для таких случаев идеально подходят value-классы. Всё что нужно — это добавить ключевое слово value перед классом:@JvmInline
value class Duration private constructor (
val millis: Long
) {
companion object {
fun millis(millis: Long) = Duration(millis)
fun seconds(seconds: Long) = Duration(seconds * 1000)
}
}
Взамен мы получим класс, который заменит примитив, и мы получим оптимизацию. Чуть больше почитать об этом можно в этой же статье.
BY Android Live 🤖

Share with your friend now:
tgoop.com/android_live/657