刚开始使用 Kotlin,并且我已经阅读了官方文档,我在从 Kotlin 库中实现接口时遇到了问题。
这是java中的接口:
public interface ResultCallBack {
void detailsRetrieved(Obj var1, AnotherInterface var2);
void anotherDataRetrieved(int var1, AnotherInterface var2);
}
我从 kotlin 调用的方法如下:
public static void startLibActivity(Context context, ResultCallBack callback) {
sLuhnCallback = callback;
context.startActivity(new Intent(context, Library.class));
}
如何从 Kotlin 调用startLibActivity
并实现ResultCallBack
我想我被这个试验困住了:
Library.startLibActivity(activity, {})
我已经在{}
中尝试了许多可能性,但在正确的实现方面仍然存在问题。
由于您的 Java 接口不是 SAM 函数接口,因此您不能直接在 Kotlin 中使用 lambda 表达式{}
。
您可以在 Kotlin 中实现 Java 接口,例如:
class KotlinResultCallBack : ResultCallBack {
override fun detailsRetrieved(var1: Obj?, var2: AnotherInterface?) = TODO()
override fun anotherDataRetrieved(var1: Int, var2: AnotherInterface?) = TODO()
}
然后你可以调用startLibActivity
方法,如下所示:
startLibActivity(context, KotlinResultCallBack())
您还可以使用对象表达式来创建实现 Java 接口的匿名类实例,例如:
startLibActivity(context, object : ResultCallBack {
override fun detailsRetrieved(var1: Obj?, var2: AnotherInterface?) = TODO()
override fun anotherDataRetrieved(var1: Int, var2: AnotherInterface?) = TODO()
})