首页 > 解决方案 > 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

难道我做错了什么?

标签: javaandroidkotlin

解决方案


这可能是因为您的setRecognizedText方法是voidorUnit并且它是此块中的最后一个表达式(所以这将返回 -Unit是 Kotlin 版本Void

在 Java 代码中你返回 null - 你应该做同样的事情但是考虑再次考虑这个,因为它看起来像代码异味


推荐阅读