Kotlin lambda/Java SAM互操作-类型不匹配
我有一个现有的Java接口,定义如下Kotlin lambda/Java SAM互操作-类型不匹配,kotlin,kotlin-interop,Kotlin,Kotlin Interop,我有一个现有的Java接口,定义如下 public interface MyRetriever extends Function<String, Optional<String>> {} 但是我得到了一个类型不匹配错误 Type missmatch. Required: MyRetriever Found: (String) -> Optional<String> 类型不匹配。 必需:MyRetriever 找到:(字符串)->可选 lambda
public interface MyRetriever extends Function<String, Optional<String>> {}
但是我得到了一个类型不匹配错误
Type missmatch.
Required: MyRetriever
Found: (String) -> Optional<String>
类型不匹配。
必需:MyRetriever
找到:(字符串)->可选
lambda实际上与Java函数定义匹配,我这里缺少什么?在执行SAM转换时,需要显式提供一个类型:
var a = MyRetriever { s : String -> Optional.ofNullable(s.toLowerCase()) }
请注意,您可能会像以前那样省略
a
的类型声明。您介意解释一下原因吗?我的意思是,我的期望是,我不会因为类型匹配。科特林非常善于猜测这样的事情this@Xipo我认为这是因为Kotlin无法正确地将其内部函数类型转换为SAM转换的lambda,因此当您将其声明为var a:MyRetriever
时,存在类型不匹配。有关更多信息,请参阅。
var a = MyRetriever { s : String -> Optional.ofNullable(s.toLowerCase()) }