Kotlin:isAssignableFrom和反射类型检查
在Kotlin(1.0.6)中,通过反射我需要遍历一个类的成员(我们称之为Foo
),并根据返回类型做一些事情。 我可以写下面的,这是有效的:
Foo::class.members{ m -> if(Integer.TYPE.isAssignableFrom(m.returnType.javaType as Class<*>)){ //do something here } else if ... }
问题是if
语句(处理kotlin.Int
)相当难看。 Kotlin有没有更好的方法可以实现相同的结果,而不必直接依赖Java API?
不,没有一个更好的方式前1.1 Kotlin。
您可以使用Int::class.javaObjectType
而不是Integer.TYPE
来避免在Kotlin代码中使用java.lang.Integer
,但这会使语句更长(尽管更习惯)。
在Kotlin 1.1中,您可以使用isSubtypeOf
或查询jvmErasure
。 allSupertypes
直接。