Kotlin, Java и JVM имеют стирание типов при реализации Generics.Обобщения не видны на уровне байт-кода.Это означает, что вы не можете использовать параметры типа, например T
, непосредственно в коде функции.
Kotlin добавляет поддержку reified
дженериков, что помогает здесь.Вы можете объявить функцию как
inline fun <reified T> getIt() : T {
...
}
. С помощью reified
и inline
можно будет привести к T
и вернуть его.https://kotlinlang.org/docs/reference/inline-functions.html#reified-type-parameters
Вторая альтернатива - следовать практике Java - добавьте параметр Class<T>
к функции и используйте Class#cast
для приведения к T
.
Вы можете комбинировать функцию reified inline
с таким подходом, как:
inline fun <reified T> getIt() = getIt(T::class.java)