如何声明参数作为函数没有返回值?
我在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(){...}