Type aliases — это просто альтернативные имена для существующих типов, они не обеспечивают дополнительную типобезопасность. Inline (value) классы создают новый, отличный тип, предотвращая случайное некорректное использование базового значения.
Type alias полностью взаимозаменяем с его базовым типом на этапе компиляции:
typealias Name = String
fun acceptString(s: String) {}
acceptString(Name("hi")) // OK — Name это String
Value class не взаимозаменяем с его базовым типом:
@JvmInline value class UserId(val id: String)
fun acceptString(s: String) {}
acceptString(UserId("hi")) // ERROR — UserId это отличный тип
Name и String как идентичныеUserId там, где ожидается обычный Stringtypealias UserMap = Map<String, User>)UserId против OrderId, оба оборачивают String)Если типобезопасность важна, всегда отдавай предпочтение value classes. Type aliases — это чисто инструмент для читаемости и никогда не уберегут тебя от путаницы с несовместимыми значениями.
Алиас типа обеспечивает безопасность типов на этапе компиляции, предотвращая взаимозаменяемое использование значений разных типов-алиасов, подобно тому, как работают value classes.
Новый — ещё не проверен сообществом
Вы