用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 */ } } }