2017-01-09 8 views
1

Kotlin(1.0.6)では、リフレクションによって、クラスのメンバーを繰り返し処理する必要があります(戻り値はFooとなります)。問題はif文は(kotlin.Intを処理するために)非常に醜いということですKotlin:isAssignableFromと反射型のチェック

Foo::class.members{ m -> 
    if(Integer.TYPE.isAssignableFrom(m.returnType.javaType as Class<*>)){ 
     //do something here 
    } else if ... 
} 

:私は動作しますが、次のように書くことができます。 KotlinにJava APIに直接頼ることなく同じ結果を得るためのよりよい方法はありますか?

答えて

1

いいえ、1.1-Kotlinより良い方法はありません。

Integer.TYPEの代わりにInt::class.javaObjectTypeを使用して、java.lang.IntegerをKotlinコードで使用することを避けることができますが、ステートメントはさらに長くなります(もっと慣習的ですが)。

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