簡體   English   中英

如何在 kotlin 中使用 lambda 進行匿名內部類替換

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM