gpt4 book ai didi

java - 当接口(interface)中只有一个方法时,如何将java中的lambda函数转换为kotlin?

转载 作者:行者123 更新时间:2023-12-02 09:37:21 25 4
gpt4 key购买 nike

我想在 kotlin 中设置一个监听器。有没有一种方法可以像java lambda函数(this::methodName)一样设置它?

我尝试自动将其转换为 kotlin,但它给了我错误 InterfaceListener 没有构造函数

public class TestActivity {

private Listener mListener;

private void init(){
setListener(this::onDataAdded);
}

private void onDataAdded(TestData testData) {

}

public void setListener(Listener listener) {
this.mListener = listener;
}

interface Listener{
void onDataAdded(TestData testData);
}

class TestData {
String data;
}

}

java 到 kotlin IDE 的转换错误消息 InterfaceListener 没有构造函数

class TestActivity {

private var mListener: Listener? = null

private fun init() {
setListener(Listener { this.onDataAdded(it) })
}

private fun onDataAdded(testData: TestData) {

}

fun setListener(listener: Listener) {
this.mListener = listener
}

internal interface Listener {
fun onDataAdded(testData: TestData)
}

internal inner class TestData {
var data: String? = null
}

}

最佳答案

您可以将 Listener 接口(interface)移至 Java 文件,以便 setListener(Listener { this.onDataAdded(it) }) 正常工作。

或者您可以使用函数代替监听器,如下所示:

typealias Listener = (TestActivity.TestData) -> Unit

class TestActivity {
private var mListener: Listener? = null

private fun init() {
setListener(this::onDataAdded)
}

private fun onDataAdded(testData: TestData) {

}

fun setListener(listener: Listener) {
this.mListener = listener
}

inner class TestData {
var data: String? = null
}
}

关于java - 当接口(interface)中只有一个方法时,如何将java中的lambda函数转换为kotlin?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57386536/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com