Ответ
В Java и Kotlin тип Generic стирается во время выполнения, поэтому напрямую узнать его нельзя. Однако можно использовать reified типы с inline функциями в Kotlin:
inline fun <reified T> checkType(value: Any) {
if (value is T) {
println("Value is of type ${T::class.java}")
} else {
println("Value is NOT of type ${T::class.java}")
}
}
// Использование:
checkType<String>("test") // Выведет: Value is of type class java.lang.String
Ключевые моменты:
reifiedсохраняет информацию о типе во время выполнения- Функция должна быть
inline - Работает только в Kotlin
- В Java такой возможности нет из-за стирания типов
Для не-reified случаев можно передавать Class параметром:
fun <T> checkType(value: Any, clazz: Class<T>) {
if (clazz.isInstance(value)) {
println("Value is of type $clazz")
}
}