Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin lambda/Java SAM互操作-类型不匹配_Kotlin_Kotlin Interop - Fatal编程技术网

Kotlin lambda/Java SAM互操作-类型不匹配

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

我有一个现有的Java接口,定义如下

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()) }