实现Java接口 - Kotlin

Nos*_*lvi 3 java kotlin

刚开始使用Kotlin并且我已经阅读了官方文档,我在kotlin库中实现接口时遇到了问题.

这是java中的接口:

public interface ResultCallBack {
    void detailsRetrieved(Obj var1, AnotherInterface var2);

    void anotherDataRetrieved(int var1, AnotherInterface var2);
}
Run Code Online (Sandbox Code Playgroud)

我从kotlin调用的方法是这样的:

 public static void startLibActivity(Context context, ResultCallBack callback) {
        sLuhnCallback = callback;
        context.startActivity(new Intent(context, Library.class));
    }
Run Code Online (Sandbox Code Playgroud)

我如何调用startLibActivity从科特林和实施ResultCallBack,以及

我想我坚持这个试验:

Library.startLibActivity(activity, {})

我已经尝试了很多可能性{},仍然存在正确实现的问题.

hol*_*ava 8

由于您的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()
}
Run Code Online (Sandbox Code Playgroud)

然后你可以调用如下startLibActivity方法:

startLibActivity(context, KotlinResultCallBack())
Run Code Online (Sandbox Code Playgroud)

您还可以使用对象表达式来创建实现Java接口的匿名类实例,例如:

startLibActivity(context, object : ResultCallBack {
    override fun detailsRetrieved(var1: Obj?, var2: AnotherInterface?) = TODO()

    override fun anotherDataRetrieved(var1: Int, var2: AnotherInterface?) = TODO()
})
Run Code Online (Sandbox Code Playgroud)