用Kotlin和lambda返回接口实现

我有这个简单的界面:

interface ValidationBehavior { fun onValidated() } 

这个接口用于一个类的一个功能:

 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 } 

One Solution collect form web for “用Kotlin和lambda返回接口实现”

不,用Kotlin编写的接口不能用lambda实例化,只能用于用Java编写的接口。 如果你想在Kotlin中使用lambdas,使用函数类型,就像你的情况() -> Unit而不是ValidationBehavior

或者,编写一个采用函数类型并将其包装在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 */ } } } 
  • Kotlin - 如何递归调用一个lambda函数
  • 在Kotlin中传递接口作为参数
  • Kotlin:我怎样才能调用一个lambda字段,它有一个泛型类?
  • 使用函数引用重写Kotlin中的Java代码会发生SAMtypes冲突
  • 在Kotlin的`forEach`中`break`和`continue`
  • Android Kotlin不能在lambda中使用list.sort()
  • Kotlin与Java:使用lambda参数调用函数
  • 如何在Kotlin中创建一个匿名接口的实例?
  • Kotin如何指定在Lambda中封闭的退货标签
  • 如何使用lambda表达式android替换匿名类
  • Java项目中Kotlin的高阶函数
  • Kotlin language will be the best programming language for Android.