Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗ktSpTpVl 122 of 299 menu
◀ ▶

Класс-значение в 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".

Создайте два одинаковых значения вашего класса и выведите результат их сравнения на равенство.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить