我想将功能性Java接口(具有单个抽象方法的接口)实现为kotlin lambda。怎么做?
@FunctionalInterface
interface Foo{
String bar(String input);
}
Java
public Foo createFoo(){
return input-> "Hello "+input;
}
↑这样编译很好↑
Kotlin。
fun createFoo():Foo {
return {input:String -> "Hello $input!"}
}
↑不编译↑
它必须作为对象实现,这很丑陋。
fun createFoo() =
object : Foo{
override fun bar(input: String)= "Hello $input"
}
我认为没有语言级别的选项可以执行此操作,但是您可以将“丑陋的”代码抽象为一个辅助方法,以便在实际需要业务逻辑的地方更容易阅读:
助手方法
fun Foo(body: (String) -> String) = object : Foo{
override fun bar(input: String)= body(input)
}
公司代码
fun createFoo():Foo {
return Foo {input:String -> "Hello $input!"}
}