Bạn có thể kiểm tra tính khả dụng với isMarkedNullable
. Các mã sau đây:
class MyClass(val nullable: Long?, val notNullable: MyClass)
MyClass::class.declaredMemberProperties.forEach {
println("Property $it isMarkedNullable=${it.returnType.isMarkedNullable}")
}
sẽ in:
Property val MyClass.notNullable: stack.MyClass isMarkedNullable=false
Property val MyClass.nullable: kotlin.Long? isMarkedNullable=true
Trích từ documentation (tôi nhấn mạnh):
Đối với các loại Kotlin, nó có nghĩa là giá trị null được phép có đại diện theo loại này. Trong thực tế, điều đó có nghĩa là loại đã được khai báo với dấu chấm hỏi ở cuối. Đối với các loại không phải Kotlin, có nghĩa là loại hoặc biểu tượng được khai báo với loại này là được chú thích bằng chú thích không có khả năng giữ lại thời gian chạy như javax.annotation.Nullable.
Lưu ý rằng ngay cả khi isMarkedNullable
là sai, giá trị của các loại thể vẫn có null
. Điều này có thể xảy ra nếu nó là một loại của các loại tham số với một nullable trên ràng buộc:
fun <T> foo(t: T) {
// isMarkedNullable == false for t's type, but t can be null here
}
bạn có thể cung cấp một liên kết đến tài liệu? –
@KirillRakhman nó có trong dòng đầu tiên. – miensol
Rất tiếc, đã bỏ lỡ. –