Value Class
https://kotlinlang.org/docs/inline-classes.html |
value class
Это оболочка вокруг значения без накладных расходов. Может иметь только один параметр в первичном конструкторе. value-классы позволяют повысить безопасность кода с минимальным использованием шаблонного кода и обеспечив производительность. Без ключевого слова value компилятор каждый раз создает объект класса и размещает его в памяти.
// Пример value-класса - класс Duration для установки времени в мс. Вместо установки значения в Long где легко ошибится.
value class Duration private constructor(val millis: Long) {
constructor(millis: Int): this(millis.toLong()) {
check(millis != 0)
}
init {
check(millis != 0L)
}
companion object {
fun millis(millis: Long): Duration = Duration(millis)
fun seconds(seconds: Long): Duration = Duration(seconds * 1000)
}
}
val duration: Long = Duration.seconds(2L).millis
val duration: Long = Duration.millis(1200).millis
@JvmInline
value class UserId(val value: String)
@JvmInline
value class AddressId(val value: String)
data class User(val id: UserId)
data class Address(val id: AddressId)
val me = User(id = UserId("test id"))
val home = Address(id = AddressId("test id"))
if (me.id == home.id) {} // This will not compile
@JvmInline
value class Id<out T>(val value: String)
data class User(val id: Id<User>)
data class Address(val id: Id<Address>)
val me = User(id = Id("test id"))
val home = Address(id = Id("test id"))
if (me.id == home.id) {} // This will not compile also
Kotlin Value Class. Вопросы на собесе
- Что такое value class в Kotlin и какова его основная цель?
- Какие ограничения есть у value class?
- Как value class влияет на производительность и использование памяти?