用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 */ } } }
- getActionView已被弃用?
- Vert.x使用BLOB和休眠区分数据库中的数据
- RxJava zip使用Android Studio 3.0在Kotlin中遇到IDE错误
- Firebase:在Kotlin / Java中使用枚举字段的干净方式?
- 是否有可能在Android项目中运行最新版本的Akka Framework(2.5.2)?
- 使用maven与Java和Kotlin混合的项目创建runnable / uber jar
- 如何阅读Chronicle队列中的最后N个记录?
- 如何保存从RadioButton中选择的颜色,并使用android应用于ListView
- 如何从Kotlin调用Java的字符串构造函数(char ,int offset,int length)?