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

Сохраненный тип в Kotlin

У обычной обобщенной функции имя параметра типа исчезает во время выполнения, и выражение вроде T::class для произвольного T написать нельзя.

Если функцию одновременно встраивают и помечают тип как reified, компилятор подставляет конкретный класс в каждую точку вызова. Тогда внутри тела снова доступен класс элемента:

inline fun <reified T> typeLabel(value: T): String { return "${T::class.simpleName}:$value" }

Вызов с разными аргументами дает разные подписи, потому что вместо T каждый раз подставлен свой класс:

fun main() { println(typeLabel("api")) println(typeLabel(404)) }

Без reified та же идея через параметр типа не собирается: компилятор не знает, какой KClass имел в виду автор функции. Рабочий путь - встраивание плюс сохраненный тип. Так удобно писать проверки, где класс согласован с аргументом, без второго параметра вручную:

inline fun <reified T> isInt(value: Any): Boolean { return T::class == Int::class && value is Int }

Напишите функцию с параметром типа, которая возвращает строку "int" или "other" в зависимости от того, передали ли число. Используйте класс параметра типа внутри тела. Проверьте на 10 и на "x".

Сделайте функцию, которая принимает значение любого типа и возвращает его простое имя класса и текст через двоеточие. Выведите результат для логического true и для строки "ok".

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