实现Java接口 - Kotlin

3

我刚开始学习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, {}) 在大括号内我尝试了很多可能性,但仍然无法正确实现。

你尝试了什么? - talex
你的 Kotlin 代码是什么样子的? - Makoto
@Makoto 我刚刚更新了问题。 - Belvi Nosakhare
1个回答

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()
}

然后,您可以按照以下方式调用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()
})

谢谢。这个有效!将在5分钟内接受答案。 - Belvi Nosakhare
@belvi 一点也不。 - holi-java

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接