以下是一些 kotlin 代码,用于打印任何语句或语句块的执行时间:
fun exeTime(code: () -> Unit) {
var start = System.currentTimeMillis()
code()
var end = System.currentTimeMillis() - start
println("Execution time: " + end + "ms")
}
可以像这样使用:
exeTime {
// some code
// ...
}
exeTime 函数在Java中的等效构造是什么?
答案 0 :(得分:4)
我会是这样的:
public void exeTime(Runnable code){
long start = System.currentTimeMillis();
code.run();
long end = System.currentTimeMillis() - start;
System.out.println("Execution time: " + end + "ms");
}
关于高阶函数和lambdas
阅读此doc答案 1 :(得分:1)
嗯,Java没有数据类型作为单位,所以基本上你不能传递方法而不是它的值。当您在Java中将方法作为方法的参数传递时,它将执行。如果你需要用Java做同样的最简单的方法来使用反射。类似的东西。
void <T> execTime (Class<T> type, String methodName, Object... methodParams) {
}
答案 2 :(得分:1)
这是“高阶函数”的简单示例,即以另一个函数作为参数的函数。 在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");
}
此外,Runnable
可用作接口类型。
在1.8之前,您将使用匿名函数而不是传递给exeTime
函数的lambda。