Для того, чтобы сделать это, вам также нужно сделать вашу функцию встроенной + изменить параметр типа:
inline fun <reified T> functionGeneric(t: Any) {
DefineTypeGeneric<T>().checkType(t)
}
Причина этого в том, что ваш DefineTypeGeneric<T>()
фактически встроен и имеет параметр типа T
, используя информацию, которую он имеет на сайте вызова (необходимо использовать T::class.java
).
Если вы не включите и новый functionGeneric
, нет никакой информации о T
на сайте вызовов DefineTypeGeneric<T>()
(который находится внутри тела functionGeneric
).
В качестве примечания, если вам не нужны никакие другие функции из вашего класса DefineTypeGeneric
, Вы можете сделать все это, используя единственную встроенную функцию верхнего уровня:
inline fun <reified T> checkType(t: Any) {
when {
T::class.java.isAssignableFrom(t::class.java) -> println("Correct")
else -> println("Wrong")
}
}
Или, если logi c более сложный, одну встроенную функцию и одну стандартную функцию:
inline fun <reified T> checkType(t: Any) = checkType(T::class.java, t)
fun <T> checkType(target: Class<T>, t: Any) {
when {
target.isAssignableFrom(t::class.java) -> println("Correct")
else -> println("Wrong")
}
}