这个kotlin代码与java的等价物是什么

这个kotlin代码与java的等价物是什么,java,Java,下面是一些打印任何语句或语句块的执行时间的kotlin代码: fun exeTime(code: () -> Unit) { var start = System.currentTimeMillis() code() var end = System.currentTimeMillis() - start println("Execution time: " + end + "ms") } 它可以这样使用: exeTime { // some co

下面是一些打印任何语句或语句块的执行时间的kotlin代码:

fun exeTime(code: () -> Unit) {
    var start = System.currentTimeMillis()
    code()
    var end = System.currentTimeMillis() - start
    println("Execution time: " + end + "ms")
}
它可以这样使用:

exeTime {
    // some code
    // ...
}

在Java中,exeTime函数的等效结构是什么?

我将类似于:

public void exeTime(Runnable code){
    long start = System.currentTimeMillis();
    code.run();
    long end = System.currentTimeMillis() - start;
    System.out.println("Execution time: " + end + "ms");
}

阅读这篇关于高阶函数和lambdas的文章

好吧,Java没有数据类型作为单位,所以基本上你不能传递一个方法而不是它的值。当您在Java中将方法作为方法的参数传递时,它将执行。如果您需要在Java中执行同样的操作,那么使用反射是最简单的方法。类似的东西

void <T> execTime (Class<T> type, String methodName, Object... methodParams) {

}
void execTime(类类型、字符串方法名、对象…方法参数){
}

这是一个简单的“高阶函数”示例,即将另一个函数作为参数的函数。 在Java中,您还可以从1.8开始使用lambdas,如下所示:

public static void main(String[] args) {
    exeTime(v -> System.out.println("from Lambda"));
}

static void exeTime(Consumer<Void> code) {
    long start = System.currentTimeMillis();
    code.accept(null);
    long end = System.currentTimeMillis() - start;
    System.out.println("Execution time: " + end + "ms");
}
publicstaticvoidmain(字符串[]args){
exeTime(v->System.out.println(“来自Lambda”);
}
静态无效时间(消费者代码){
长启动=System.currentTimeMillis();
code.accept(空);
long end=System.currentTimeMillis()-开始;
System.out.println(“执行时间:+end+ms”);
}
也可以将
Runnable
用作接口类型


在1.8之前,您应该使用匿名函数,而不是传递给
exeTime
函数的lambda。

同样,只需使用
可运行代码作为参数,并在函数中调用
code.run()