java - Lambdas 函数 Kotlin 和类型 Mismatch
问题描述
我正在尝试将一个函数从 java 移植到 kotlin,但我遇到了很多问题。原来的java代码是这样的:
setOnTaskCompletedListener(task, result -> {
final String s = result.getText();
reco.close();
Log.i(logTag, "Recognizer returned: " + s);
setRecognizedText(s);
});
private <T> void setOnTaskCompletedListener(Future<T> task, OnTaskCompletedListener<T> listener) {
s_executorService.submit(() -> {
T result = task.get();
listener.onCompleted(result);
return null;
});
}
这是我的 kotlin 转换代码:
private fun <T> setOnTaskCompletedListener(task:Future<T>, listener: OnTaskCompletedListener<T>){
s_executorService.submit({
val result = task.get()
listener.onCompleted(result)
});
}
这是我的代码返回错误的地方:
setOnTaskCompletedListener(task, { result ->
val s = result.getText()
reco.close()
Log.i(logTag, "Recognizer returned: " + s)
setRecognizedText(s)
})
我不断在“{ result -> ... }”上收到此错误:
Type mismatch: inferred type is (???) -> Unit but OnTaskCompletedListener<???> was expected
难道我做错了什么?
解决方案
这可能是因为您的setRecognizedText
方法是void
orUnit
并且它是此块中的最后一个表达式(所以这将返回 -Unit
是 Kotlin 版本Void
)
在 Java 代码中你返回 null - 你应该做同样的事情但是考虑再次考虑这个,因为它看起来像代码异味
推荐阅读
- docker - 无法在 docker 容器中运行 jupyterhub
- python - 在 Pandas 中将字符串转换为时间
- python - 建议的最大任务大小为 100 KB 如何使用 python spark 解决此问题 如何在 python pyspark 中解决此问题
- qt - 如何读取 main.qml 中的 listmodel 角色属性?
- excel - 如何从 MSHTML.IHTMLElementCollection 中选择特定表
- excel - Excel Pivottable 刷新(2010 与 2016) - 为什么在 2016 年不工作,但在 2010 年工作?
- sql - Postgresql 约束在时间戳之间没有重叠
- angular - 在父组件中显示搜索结果
- typescript - TypeScript 泛型:泛型属性的联合
- business-process-management - 使用 REST API 在 IBM BPM 8.6 上获取文档属性