[英]How to use lambda in kotlin for anonymous inner class replacement
我需要你的幫助來處理下面的 kotlin 代碼(另存為 Fun.kt)
import javax.swing.*
import java.awt.*
import java.awt.event.*
class Amir
{
fun addActionListener(m:ActionListener)
{
}
}
fun main()
{
//SUCCESS
val btnLambda=JButton("LAMBDA")
btnLambda.addActionListener(){}
//FAILED
val mahmud=Amir()
mahmud.addActionListener(){}
}
我的問題是,為什么這一行在編譯時會成功:
btnLambda.addActionListener(){}
但這一行失敗了:
mahmud.addActionListener(){}
提前致謝
有兩種方法可以解決這個問題。
您應該以另一種方式調用addActionListener
,因為它需要一個ActionListener
對象,而不是lambda :
mahmud.addActionListener(ActionListener {})
或者您應該更改 Amir#addActionListener 函數的簽名以使addActionListener() {}
語法有效:
import java.awt.event.ActionEvent
import java.awt.event.ActionListener
class Amir {
fun addActionListener(action: (e: ActionEvent) -> Unit) {
val m = ActionListener(action)
}
}
fun main() {
val mahmud = Amir()
mahmud.addActionListener {}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.