Kotlin 如何将参数声明为没有返回值的函数?
我在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
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();
}