Khi gọi mã Java từ Kotlin, có SAM conversion để mã Java như thế này:Sử dụng giao diện chức năng với các loại chức năng trong Kotlin
adapter.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view, int position) {
// Do stuff here
}
});
có thể trông như thế này:
adapter.setOnClickListener { view, position ->
// Do stuff
}
Bây giờ, tôi đang làm việc trên dự án Kotlin và tôi muốn xác định giao diện chức năng làm người nghe sự kiện:
interface OnSomeActionListener {
fun onSomeAction(parameter1: Int, parameter2: String)
}
Trong SomeClass
Tôi có một chức năng để thiết lập người nghe:
...
private var onSomeActionListener: OnSomeActionListener? = null
fun setOnSomeActionListener(listener: OnSomeActionListener) {
onSomeActionListener = listener
}
...
Và khi tôi tạo một thể hiện của lớp này và cố gắng gọi hàm setter, tôi làm điều đó như vậy:
val thing = SomeClass()
thing.setOnSomeActionListener(object : OnSomeActionListener {
override fun onSomeAction(parameter1: Int, parameter2: String) {
// Do stuff here
}
})
tôi nhận thức được rằng Kotlin có các loại chức năng do đó không hỗ trợ chuyển đổi SAM từ các trang web khác nhau như this one.
Tôi đã đọc một chút về các loại chức năng nhưng tôi chưa từng sử dụng chúng trước đây.
Tôi làm cách nào để viết lại mã của mình để tôi có thể gọi hàm setter như thế này?
val thing = SomeClass()
thing.setOnSomeActionListener { parameter1, parameter2 ->
// Do stuff here
}
.
Cảm ơn cho câu trả lời. Tôi nghĩ nội dung được chia thành các phần rõ ràng và được viết như một hướng dẫn từng bước rất hữu ích. –