2017-01-09 197 views
1

在Kotlin(1.0.6)中,通过反射我需要遍历一个类的成员(我们称它为Foo),并根据返回类型做一些事情。我可以写出如下,其中工程:Kotlin:isAssignableFrom和反射类型检查

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.1 Kotlin。

您可以使用Int::class.javaObjectType代替Integer.TYPE避免使用在科特林代码java.lang.Integer但使得语句甚至更长的时间(虽然更地道)。

在Kotlin 1.1中,您可以使用isSubtypeOf或查询jvmErasure。直接使用allSupertypes

+0

thx。不幸的是,我无法尝试1.1,因为它在Maven Central上看起来还不可用(https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-maven-plugin/)一旦它可用,我会尝试一下,看看''if'''语句可以用''isSubtypeOf''来简化 – arcuri82