orangy
fun main(args: Array<String>) {
getProperty<List<Int>>()
getProperty<List<String>>()
getProperty<HashMap<Int, String>>()
}
inline fun <reified T> getProperty(token: Any = object : TypeToken<T> {}) {
token::class.supertypes.forEach {
val parameterizedType = it.javaType as ParameterizedType
parameterizedType.actualTypeArguments.forEach {
println(it)
}
}
}
interface TypeToken<T>
prints
java.util.List<? extends java.lang.Integer>
java.util.List<? extends java.lang.String>
java.util.HashMap<java.lang.Integer, java.lang.String>