假设我有这样的代码片段:
try {
// code I need to wrap to be a helper
long t0 = System.nanoTime();
obj.doSomething(); // a void function
long t1 = System.nanoTime();
Logger.info("doSomthing takes {} nanoseconds", t1-t0);
} catch (IOException ex) {
Logger.error("something wrong happened");
}
// another code
try {
long t0 = System.nanoTime();
obj.doAnotherThing(); // void function
long t1 = System.nanoTime();
Logger.info("doSomthing takes {} nanoseconds", t1-t0);
} catch (IOException ex) {
Logger.error("something wrong happened");
}
所以我的问题实际上是如何将 void 函数作为参数传递给辅助函数,这样我就可以避免用于测量函数执行时间的冗余代码。
跟进:如果 doSomething 可以抛出 IOException 怎么办
在这种情况下,如果我不想在 labmda 中捕获异常,我应该如何调用 lambda 世界中的函数。
谢谢
最佳答案
您可以使用Runnable
:
public void timeThis(Runnable runnable) {
long t0 = System.nanoTime();
runnable.run();
long t1 = System.nanoTime();
Logger.info("Execution took {} nanoseconds", t1 - t0);
}
然后您可以将要运行的函数作为参数传递给 timeThis
:
timeThis(() -> obj.doSomething());
如果 obj.doSomething()
恰好抛出一个 IOException
就像您在下面提到的那样,您可以简单地在 Runnable
的主体中捕获它>:
timeThis(() -> {
try {
obj.doSomething();
} catch (IOException e) {
e.printStackTrace();
}
});
注意:这不是一个合适的基准。请参阅:How do I write a correct micro-benchmark in Java?
关于java - 如何将其包装为辅助函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49682124/