在 Kotlin 中将接口作为参数传递

新手上路,请多包涵

我想像这样传递一个接口作为参数:

 class Test {
    fun main() {
        test({})
        // how can I pass here?
    }

    fun test(handler: Handler) {
        // do something
    }

    interface Handler {
        fun onCompleted()
    }
}

在 Java 中,我可以使用像 test(new Handler() { .......... }) 这样的匿名函数,但我不能在 Kotlin 中这样做。有人知道怎么做吗?

原文由 maphongba008 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 911
2 个回答

在科特林你可以这样做:

 test(object: Handler {
    override fun onComplete() {

    }
})

或者以同样的方式创建属性:

 val handler = object: Handler {
    override fun onComplete() {

    }
}

并且,在代码的某处:test(handler)

原文由 Tomasz Czura 发布,翻译遵循 CC BY-SA 3.0 许可协议

因为您的界面只有一个功能。你可以像这样把它转换成 SAM

 fun interface Handler {
        fun onCompleted()
}

那么你可以只使用 lambda 来实现这个接口,从而减少整体编写的代码。这只有在 v1.4 中才有可能

原文由 eliranno 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题