java - 在 Java 中传递静态方法

标签 java

我正在尝试创建一个类来计算方法的平均运行时间。我知道如何通过运行 100 次并取其平均值来做到这一点。示例:

private long calculateAvg(){
    long totalTime = 0;

    for(int i = 0; i < ITERATIONS; i++){
        long startTime = System.nanoTime();
        testMethod();
        long endTime = System.nanoTime();

        totalTime += (endTime - startTime);  //divide by 1000000 to get milliseconds.
    }
    return (totalTime / ITERATIONS);

}

现在我可以将它设置为适用于一个静态方法,但是有没有一种方法可以将不同的静态方法传递给它来计算,而不是为我想测试的每个方法创建一个?如果没有,是否有一种设计模式可以在这里工作?截至目前,我正在为我想要计时的所有其他方法创建其中一种方法,但它似乎效率不高,因为我重复使用了太多代码。

最佳答案

您可以接受并运行一个Runnable 参数:

private long calculateAvg(Runnable r) {
    //...
    long startTime = System.nanoTime();
    r.run();
    long endTime = System.nanoTime();
    //...
}

然后这样调用它:

long avg1 = calculateAvg(() -> testMethod());
long avg2 = calculateAvg(() -> testMethod2());

您可能还想考虑来自 How do I write a correct micro-benchmark in Java? 的一些提示

关于java - 在 Java 中传递静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42941570/

相关文章:

Java - 我是否必须在包包含的所有类中注释包?

java - Dagger 2 : no injector factory bound for fragment

java - 我如何在java中扩展数据类型

java - 将特定字符串转换为 byte[]

Java:按照指定的时间间隔执行一个方法

java - 直接在循环中使用时 countTokens() 方法行为不当

java - .jar 文件不包含 manifest.mf 中的 Main-Class 属性

java - 如何使用java中的excel从第1列和第3列获取单元格值并将其作为键值对放入 map 中

java - 作为泛型类型绑定(bind)的静态嵌套类不起作用

java - Spring 交易: rollback on Exception or Throwable