2016-10-27 25 views
7

Tôi đang phát triển trình tạo mã để lấy dữ liệu từ các lớp trong thời gian chạy. Máy phát điện này được thiết kế để chỉ hoạt động với Kotlin. Tại thời điểm này, tôi đã phải đối mặt với vấn đề này, vì tôi không biết làm thế nào để kiểm tra xem lĩnh vực này là nullable.Kotlin. Làm thế nào để kiểm tra xem trường là nullable thông qua sự phản ánh?

Vì vậy, câu hỏi chính là cách triển khai kiểm tra này thông qua phản ánh?

Trả lời

8

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 
} 
+0

bạn có thể cung cấp một liên kết đến tài liệu? –

+0

@KirillRakhman nó có trong dòng đầu tiên. – miensol

+0

Rất tiếc, đã bỏ lỡ. –

Các vấn đề liên quan