Lo siguiente es un código kotlin que imprime el tiempo de ejecución de cualquier declaración o bloque de declaraciones:

fun exeTime(code: () -> Unit) {
    var start = System.currentTimeMillis()
    code()
    var end = System.currentTimeMillis() - start
    println("Execution time: " + end + "ms")
}

Se puede utilizar así:

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

¿Cuál es la construcción equivalente en Java para la función exeTime ?

-4
Arbaz Mateen 23 oct. 2017 a las 16:21

3 respuestas

La mejor respuesta

Seré algo así como:

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

Lea este doc sobre funciones de orden superior y lambdas

4
crgarridos 23 oct. 2017 a las 13:25

Ese es un ejemplo sencillo de una "función de orden superior", es decir, una función que toma otra función como argumento. En Java también puede usar lambdas a partir de 1.8, que podría tener el siguiente aspecto:

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");
}

También Runnable podría usarse como tipo de interfaz.

Antes de 1.8, habría utilizado una función anónima en lugar de la lambda pasada a la función exeTime.

1
s1m0nw1 23 oct. 2017 a las 13:28

Bueno, Java no tiene ningún tipo de datos como Unidad, por lo que básicamente no puede pasar un método en lugar de su valor. Cuando pasa un método como argumento de un método en Java, se ejecuta. Si necesita hacer lo mismo en Java, la forma más fácil de usar la reflexión. Algo similar a esto.

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

}
1
Sachith Dickwella 23 oct. 2017 a las 13:28