用Kotlin和lambda返回接口实现
我有这个简单的界面:
interface ValidationBehavior { fun onValidated() }
这个接口用于一个类的一个function:
private enum class BehaviorEnum { IDLE, NAVIGATEBACK } private fun getBehavior(payloadBehavior: String) : ValidationBehavior { when(BehaviorEnum.valueOf(payloadBehavior)) { BehaviorEnum.IDLE -> return object: ValidationBehavior { override fun onValidated() { // do some stuff } } } }
我的问题是:是否有一种方法来简化与lambda返回语句? 我尝试一些这样的东西,但它不工作:
return ValidationBehavior{ () -> //do some stuff }
不,用Kotlin编写的接口不能用lambda实例化,只能用于用Java编写的接口。 如果你想在Kotlin中使用lambdas,使用函数types,就像你的情况() -> Unit
而不是ValidationBehavior
。
或者,编写一个采用函数types并将其包装在ValidationBehavior
:
interface ValidationBehavior { companion object { inline operator fun invoke(fn: () -> Unit) = object: ValidationBehavior { override fun onValidated() = fn() } } fun onValidated() } private fun getBehavior(payloadBehavior: String) : ValidationBehavior { when(BehaviorEnum.valueOf(payloadBehavior)) { BehaviorEnum.IDLE -> return ValidationBehavior { /* do stuff */ } } }