如何在Kotlin中将功能接口实现为lambda?

问题描述 投票:0回答:1

我想将功能性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"
     }
kotlin lambda functional-interface
1个回答
0
投票

我认为没有语言级别的选项可以执行此操作,但是您可以将“丑陋的”代码抽象为一个辅助方法,以便在实际需要业务逻辑的地方更容易阅读:

助手方法

fun Foo(body: (String) -> String) = object : Foo{
  override fun bar(input: String)= body(input)
}

公司代码

fun createFoo():Foo {
  return Foo {input:String -> "Hello $input!"}
}
© www.soinside.com 2019 - 2024. All rights reserved.