Класс-значение в Kotlin
Строка с идентификатором заказа и строка с именем файла
имеют один и тот же тип String. Компилятор не
остановит передачу одной там, где ждут другую, если
обе переменные просто строки.
Класс-значение хранит одно поле и в рантайме
часто представлен как это поле без лишней обертки.
Аннотация @JvmInline и ключевое слово
value class задают такую модель:
@JvmInline
value class OrderId(val raw: String)
fun printOrder(id: OrderId) {
println(id.raw)
}
Функция принимает только OrderId, а не любую
строку. Создание значения идет через конструктор
класса-значения:
@JvmInline
value class OrderId(val raw: String)
fun main() {
val id = OrderId("ord-42")
println(id.raw)
}
Снаружи видно свойство raw с исходным текстом.
Сравнение и вывод работают через это единственное
свойство, которое разрешено у такого класса:
@JvmInline
value class OrderId(val raw: String)
fun main() {
val first = OrderId("ord-1")
val second = OrderId("ord-1")
println(first == second)
}
Оберните код товара в класс-значение с одним
строковым свойством. Сделайте функцию, которая
печатает только такой код, и проверьте ее для
"sku-9".
Создайте два одинаковых значения вашего класса и выведите результат их сравнения на равенство.