tgoop.com/android_live/940
Last Update:
Как работает reified?
#kotlin
Kotlin предлагает множество крутых фичей, которые делают написание кода проще и удобнее. reified — одна из них, и так как подобная функция есть далеко не во всех языках программирования, то многие разработчики не совсем понимают, для чего им она нужна.
💡Давайте рассмотрим пару кейсов, когда мы можем сделать наш код чище и более "Kotlin-style".
С reified непосредственно связано понятие inline функций и использование generics. При их использовании может потребоваться знание того, какого типа класс мы используем. Рассмотрим пример маппинга json в нужный нам класс:fun <T> String.toKotlinObject(): T {
val mapper = jacksonObjectMapper()
//does not compile!
return mapper.readValue(this, T::class.java)
}
Чтобы исправить ошибку при компилировании, у нас есть две опции.
1️⃣ Передавать класс в параметрах. Тогда наша функция будет выглядеть так:fun <T: Any> String.toKotlinObject(c: KClass<T>): T {
val mapper = jacksonObjectMapper()
return mapper.readValue(this, c.java)
}
А её вызов будет таким: jsonTypeAsString.toKotlinObject(MyJsonType::class)
.
2️⃣ Использовать reified. Тогда всё станет сильно удобнее и красивее:inline fun <reified T: Any> String.toKotlinObject(): T {
val mapper = jacksonObjectMapper()
return mapper.readValue(this, T::class.java)
}
А вызов будет таким: json.toKotlinObject<MyJsonType>()
.
Как мы видим, второй вариант выглядит гораздо более удобным для использования, хотя наш пример — довольно простая функция. В более сложных кейсах это преимущество может быть ещё заметнее.
Больше подробностей о reified можно найти в этой небольшой статье. 🤓
BY Android Live 🤖

Share with your friend now:
tgoop.com/android_live/940