私は、実行時にクラスからデータを取得するコードジェネレータを開発しています。この発電機はKotlinだけで動作するように設計されています。現時点では、フィールドがNULL可能かどうかを確認する方法がわからないため、問題に直面しました。Kotlin。リフレクションによってフィールドがnullableであるかどうかをチェックする方法
したがって、反射を介してこの小切手を実装する方法が主な質問です。
私は、実行時にクラスからデータを取得するコードジェネレータを開発しています。この発電機はKotlinだけで動作するように設計されています。現時点では、フィールドがNULL可能かどうかを確認する方法がわからないため、問題に直面しました。Kotlin。リフレクションによってフィールドがnullableであるかどうかをチェックする方法
したがって、反射を介してこの小切手を実装する方法が主な質問です。
許容範囲は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 }
あなたはドキュメントへのリンクを提供することができますか? –
@KirillRakhmanそれは最初の行にあります。 – miensol
申し訳ありませんが、それを逃した。 –