![](/img/trans.png)
[英]How to convert Java lambda based on functional interface to Kotlin one?
[英]How to convert lambda function in java to kotlin when there is one method in interface?
我想在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
接口移至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
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.