Ответ
В Java/Android получить тип дженерика в runtime напрямую невозможно из-за type erasure - информация о типе стирается во время компиляции. Однако есть обходные пути:
- Через передачу Class в конструктор:
class GenericClass<T>(private val clazz: Class<T>) {
fun getType(): Class<T> = clazz
}
// Использование
val instance = GenericClass(String::class.java)
val type = instance.getType() // вернет String::class.java
- Через рефлексию и ParameterizedType (если дженерик используется в поле/методе):
val field = MyClass::class.java.getDeclaredField("genericList")
val type = (field.genericType as ParameterizedType).actualTypeArguments[0]
- Используя inline функции с reified типами:
inline fun <reified T> getType(): Class<T> = T::class.java