Kotlin. ¿Cómo verificar si el campo es anulable a través de la reflexión?

Estoy desarrollando un generador de código que toma los datos de las classs durante el time de ejecución. Este generador está diseñado para funcionar solo con Kotlin. Por el momento, tuve que enfrentar el problema, ya que no sé cómo verificar si el campo es nulo.

¿Entonces la pregunta principal es cómo implementar esta verificación a través de la reflexión?

Puede verificar la isMarkedNullable con isMarkedNullable . El siguiente código:

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

se imprimirá:

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

Extracto de la documentation (énfasis mío):

Para los types de Kotlin, significa que el valor nulo puede representarse por este tipo. En la práctica, significa que el tipo fue declarado con un signo de interrogación al final. Para los types que no son de Kotlin, significa que el tipo o el símbolo que se declaró con este tipo se anota con una anotación de anulación de time retenida en time de ejecución, como javax.annotation.Nullable.

Tenga en count que incluso si isMarkedNullable es falso, los valores del tipo aún pueden ser null . Esto puede suceder si se trata de un tipo de parámetro de tipo con un límite superior anulable:

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