刚开始使用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, {})
我在{}
内尝试了很多可能性,但仍然遇到了正确实施的问题。
答案 0 :(得分:8)
由于您的java界面不是SAM Functional Interface,因此您无法直接在Kotlin中使用lambda表达式{}
。
你可以在Kotlin中implement a Java interface,例如:
class KotlinResultCallBack : ResultCallBack {
override fun detailsRetrieved(var1: Obj?, var2: AnotherInterface?) = TODO()
override fun anotherDataRetrieved(var1: Int, var2: AnotherInterface?) = TODO()
}
然后您可以调用startLibActivity
方法,如下所示:
startLibActivity(context, KotlinResultCallBack())
您还可以使用object expression创建实现Java接口的匿名类实例,例如:
startLibActivity(context, object : ResultCallBack {
override fun detailsRetrieved(var1: Obj?, var2: AnotherInterface?) = TODO()
override fun anotherDataRetrieved(var1: Int, var2: AnotherInterface?) = TODO()
})