如何声明参数作为函数没有返回值?

我在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中声明它,所以上面的代码将工作?

你尝试使用Unit

 fun f(voidFunc: () -> Unit) { // <...> } 

更新:经过一些谷歌搜索,我应该承认,这个解决方案不适合你。 有一个开放的问题,涉及使用Kotlin函数类型的Java方法引用。

但是,在Java中仍然有一个解决方法(看上去很丑,是的):

 public Unit voidFunc() { // <...> return null; } 

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

 fun printExecutionTime(block: Runnable) { run { val currentTimeMillis = System.currentTimeMillis() block.run() //... } } 

那么你可以使用java方法的引用表达式如下:

 PerformanceKt.printExecutionTime(this::voidFunc); void voidFunc(){...}