Możesz sprawdzić czy nullability jest z isMarkedNullable
. Poniższy kod:
class MyClass(val nullable: Long?, val notNullable: MyClass)
MyClass::class.declaredMemberProperties.forEach {
println("Property $it isMarkedNullable=${it.returnType.isMarkedNullable}")
}
wypisze:
Property val MyClass.notNullable: stack.MyClass isMarkedNullable=false
Property val MyClass.nullable: kotlin.Long? isMarkedNullable=true
Fragment documentation (Kopalnia nacisk):
Dla typów Kotlin, oznacza to, że wartość zerowa może być reprezentowany według tego typu. W praktyce oznacza to, że typ został oznaczony jako ze znakiem zapytania na końcu. W przypadku typów innych niż Kotlin oznaczenie oznacza typ lub symbol, który został zadeklarowany z tym typem, a jest on opatrzony adnotacją nullability z zachowaniem środowiska wykonawczego, taką jak javax.annotation.Nullable.
Należy pamiętać, że nawet jeśli isMarkedNullable
jest fałszywa, wartości typu mogą nadal null
. Może się to zdarzyć, jeśli jest to typ parametru type z pustych górna granica:
fun <T> foo(t: T) {
// isMarkedNullable == false for t's type, but t can be null here
}
można podać link do dokumentacji? –
@KirillRakhman jest tam w pierwszym wierszu. – miensol
Przepraszam, spóźniłem się. –