有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

下面是一些打印任何语句或语句块的执行时间的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函数的等效结构是什么


共 (3) 个答案

  1. # 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

  2. # 2 楼答案

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

    void <T> execTime (Class<T> type, String methodName, Object... methodParams) {
    
    }
    
  3. # 3 楼答案

    我会是这样的:

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

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