TGViewer
Android Live 🤖 Android Live 🤖 @android_live · 5.12K subscribers
Post #657 3.19K
​​Для чего нужны 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)
}
}


Взамен мы получим класс, который заменит примитив, и мы получим оптимизацию. Чуть больше почитать об этом можно в этой же статье.
More from @android_live
  1. Sep 29, 2026Post #1130
  2. Sep 29, 2026На днях попалась вакансия мечты Вроде всё начинается как неплохо: удалёнка, Kotlin/Jetpack…
  3. Sep 28, 2026На днях ревьювил код, связанный с копированием в буфер обмена И заметил, что многие прилож…
  4. Sep 26, 2026AirDrop на Android, похоже, уже есть на нескольких моделях Android Но, оказывается, всё эт…
  5. Sep 25, 2026Похоже, есть что посмотреть на выходных Недавно вышло интервью с Женей Вороновым Jake Whar…
  6. Sep 15, 2026Google выкатили ARTEMIS Эта инструмент, который превращает обычный текст в реальные действ…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →