2016-10-27 14 views
7

私は、実行時にクラスからデータを取得するコードジェネレータを開発しています。この発電機はKotlinだけで動作するように設計されています。現時点では、フィールドがNULL可能かどうかを確認する方法がわからないため、問題に直面しました。Kotlin。リフレクションによってフィールドがnullableであるかどうかをチェックする方法

したがって、反射を介してこの小切手を実装する方法が主な質問です。

答えて

8

許容範囲はisMarkedNullableでチェックできます。以下のコード:

class MyClass(val nullable: Long?, val notNullable: MyClass) 
MyClass::class.declaredMemberProperties.forEach { 
    println("Property $it isMarkedNullable=${it.returnType.isMarkedNullable}") 
} 

が印刷されます:documentationから

Property val MyClass.notNullable: stack.MyClass isMarkedNullable=false 
Property val MyClass.nullable: kotlin.Long? isMarkedNullable=true 

抜粋(強調鉱山):

をKotlinタイプの場合、それはNULL値が を表現することを許可されることを意味しますこのタイプによって。実際には、そのタイプは で、最後に疑問符で宣言されています。非Kotlin型の場合、 は、この型で宣言された型またはシンボルが、 javax.annotation.Nullableのように、実行時に保持されるNULL可能性のある注釈で注釈された であることを意味します。 isMarkedNullableがfalseの場合でも、型の値が まだnullできること

は注意してください。それがNULL可能上限と型パラメータ のタイプである場合に起こることがあります。

fun <T> foo(t: T) { 
    // isMarkedNullable == false for t's type, but t can be null here 
} 
+0

あなたはドキュメントへのリンクを提供することができますか? –

+0

@KirillRakhmanそれは最初の行にあります。 – miensol

+0

申し訳ありませんが、それを逃した。 –

関連する問題