import kotlin.test.assertEquals import java.lang.reflect.ParameterizedType import java.lang.reflect.Type open class TypeLiteral { val type: Type get() = (javaClass.getGenericSuperclass() as ParameterizedType).getActualTypeArguments()[0] } inline fun typeLiteral(): TypeLiteral = object : TypeLiteral() {} fun box(): String { assertEquals("class java.lang.String", typeLiteral().type.toString()) assertEquals("java.util.List", typeLiteral>().type.toString()) assertEquals("java.lang.String[]", typeLiteral>().type.toString()) assertEquals("java.lang.Integer[]", typeLiteral>().type.toString()) assertEquals("java.lang.String[][]", typeLiteral>>().type.toString()) return "OK" }