Các phương thức tuân theo các quy ước Java cho getters và setters (phương thức không có đối số với tên bắt đầu bằng phương thức get và đối số đơn có tên bắt đầu bằng tập hợp) được biểu diễn dưới dạng các thuộc tính trong Kotlin. Nhưng, trong khi tạo một thuộc tính cho một cặp getter / setter Java, Kotlin lúc đầu tìm kiếm một getter. Các getter là đủ để suy ra các loại tài sản từ các loại getter. Mặt khác, thuộc tính sẽ không được tạo nếu chỉ có trình thiết lập (vì Kotlin không hỗ trợ các thuộc tính chỉ thiết lập tại thời điểm này).
Khi một setter đi vào hoạt động, quá trình tạo thuộc tính trở nên hơi mơ hồ. Lý do là getter và setter có thể có loại khác nhau. Hơn nữa, getter và / hoặc setter có thể bị ghi đè trong một lớp con, đó chính xác là trường hợp của EditText trong Android.
Trong trường hợp trên, lớp TextView của Android chứa một getter
CharSequence getText()
và một khoảng trống setter
setText(CharSequence)
Nếu tôi có một biến kiểu TextView, mã của tôi sẽ hoạt động tốt. Nhưng tôi đã sử dụng lớp EditText có chứa một getter bị ghi đè
Editable getText()
điều đó có nghĩa là bạn có thể có được Chỉnh sửa cho Chỉnh sửa và đặt Chỉnh sửa thành Chỉnh sửa. Do đó, Kotlin hợp lý tạo ra một văn bản thuộc tính tổng hợp có thể chỉnh sửa. Vì lớp String không thể chỉnh sửa, đó là lý do tại sao tôi không thể gán một thể hiện String cho thuộc tính văn bản của lớp EditText.
Có vẻ như JetBrains đã quên chỉ định vai trò chi phối của các phương thức getter trong khi tạo các thuộc tính kotlin cho các phương thức getter và setter Java. Dù sao, tôi đã gửi yêu cầu kéo tới trang web Jet brains kotlin thông qua github.
Tôi cũng đã nêu chi tiết vấn đề ở bài đăng trung bình này. Làm thế nào mà Kotlin tạo tài sản từ Java Getters và Setters (Không có tài liệu của Jetbrains)