Ответ
Да, работал. reified позволяет получить доступ к типу generic-параметра во время выполнения, что обычно невозможно из-за стирания типов в Java/Kotlin. Используется с inline-функциями.
Пример:
inline fun <reified T> parseJson(json: String): T {
return Gson().fromJson(json, T::class.java)
}
// Использование
val user = parseJson<User>("""{"name":"John"}""")
Без reified пришлось бы передавать Class<T> отдельным параметром. Ограничение - можно использовать только с inline-функциями, так как код подставляется в месте вызова с конкретным типом.
Ответ 18+ 🔞
А, ну это ж про reified! Да, работало, работает и будет работать, пока джава с её стиранием типов не накроется медным тазом. Это такая штука, которая позволяет тебе, чувак, добраться до типа generic-параметра прямо в рантайме. Обычно-то это нихуя невозможно, потому что джава, как хитрая жопа, все эти <T> после компиляции стирает в Object. А тут — бац, и ты можешь.
Вот смотри, пример, чтобы не быть голословным:
inline fun <reified T> parseJson(json: String): T {
return Gson().fromJson(json, T::class.java)
}
// Использование
val user = parseJson<User>("""{"name":"John"}""")
Видишь эту магию? Ты просто вызываешь функцию, а она уже знает, что ты хочешь получить User. Без этого reified пришлось бы городить огород и тащить Class<T> отдельным параметром, типа parseJson(json, User::class). Ебать колотить, какая разница, скажешь? А разница в том, что первый вариант — это чистая магия и удобство, а второй — это как просить друга передать тебе пиво, а он каждый раз спрашивает: «А ты точно хочешь пиво? Может, тебе воду?».
Но, конечно, не всё так гладко. Ограничение есть, и оно железобетонное: reified можно юзать только с inline-функциями. Почему? Да потому что весь фокус в том, что компилятор Kotlin подставляет код функции прямо в месте вызова, и на этапе компиляции он уже знает конкретный тип T. По сути, он генерирует для каждого типа свою версию функции. Хитро, да? Не то слово.
Так что да, штука мощная. Особенно когда пишешь какие-нибудь утилиты для сериализации, рефлексии или фабрик. Просто помни: если функция не inline, то и reified не впендюрить — компилятор тебе сразу скажет «иди ты нахуй» с ошибкой.