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 如何将参数声明为没有返回值的函数?_Kotlin - Fatal编程技术网

Kotlin 如何将参数声明为没有返回值的函数?

Kotlin 如何将参数声明为没有返回值的函数?,kotlin,Kotlin,我在kotlin有一个函数 fun printExecutionTime(block: () -> Any) { run { val currentTimeMillis = System.currentTimeMillis() block() Logr.d("Execution time of " + block.javaClass.name + " -> " + System.currentTimeMillis().minus

我在kotlin有一个函数

fun printExecutionTime(block: () -> Any) {
    run {
        val currentTimeMillis = System.currentTimeMillis()
        block()
        Logr.d("Execution time of " + block.javaClass.name + " -> " + System.currentTimeMillis().minus(currentTimeMillis))
    }
}
在java代码中,我想传递void引用函数作为参数,但不能传递返回值的bcs

PerformanceKt.printExecutionTime(this::voidFunc);
一种方法是使用接口

interface Action {
    fun call()
}
是否可以在kotlin中声明它而不使用额外的接口,这样上面的代码就可以工作?

您是否尝试过使用它

funf(voidFunc:()->单位){
// 
}

upd:在谷歌搜索之后,我应该承认,这个解决方案对您不起作用。有一个公开的主题介绍了Java方法引用与Kotlin函数类型的使用

但是,在Java中仍然有一个变通方法可供使用(看起来很难看,是的):

public Unit voidFunc(){
// 
返回null;
}

您可以使用
java.lang.Runnable
来避免引入额外的接口,例如:

fun printExecutionTime(block: Runnable) {
  run {
    val currentTimeMillis = System.currentTimeMillis()
    block.run()
    //...
  }
}
然后可以使用java方法引用表达式,如下所示:

PerformanceKt.printExecutionTime(this::voidFunc);

void voidFunc(){...}

如果我也必须在java代码中使用该函数,我会使用
Runnable
Consumer
(否则我会像其他Anwer所指出的那样使用
Unit

fundoit(人物:消费者,动作:可运行){
person.accept(“消息”)
action.run();
}

您确定可以吗<代码>单元只支持函数返回类型,不支持参数。实际上,它实际上是
Function0
的一个通用参数,因此无法解决OP的问题。
fun printExecutionTime(block: Runnable) {
  run {
    val currentTimeMillis = System.currentTimeMillis()
    block.run()
    //...
  }
}
PerformanceKt.printExecutionTime(this::voidFunc);

void voidFunc(){...}
fun doIt(person:Consumer<String>, action: Runnable){
    person.accept("A message")
    action.run();
}