我可以将一个方法作为java中另一个方法的参数传递吗?

Eng*_*uad 8 java methods execution-time

我正在尝试测量几种方法的执行时间.所以我想多做一个方法而不是重复相同的代码.

这是我的代码:

private void MeasureExecutionTime(Method m)
{
    startTime = System.nanoTime();
    try
    {
        m();
    }
    finally
    {
        endTime = System.nanoTime();
    }
    elapsedTime = endTime - startTime;
    System.out.println("This takes " + elapsedTime + " ns.");
}
Run Code Online (Sandbox Code Playgroud)

假设我有myMethod(),我怎么MeasureExecutionTime()用来衡量myMethod执行时间?

hvg*_*des 6

最简单的方法是传递一个接口.所以像

public interface CommonFuncs {

   public void execute();
   ... more functions

}
Run Code Online (Sandbox Code Playgroud)

然后在你可以拥有将CommonFuncs作为参数的方法.这些方法的实现可以调用该execute方法.


Oli*_*rth 6

方法不是Java中的第一类对象,因此它们不能作为参数传递.您可以在一个扩展例如Runnable接口的烦人类中使用wrap方法调用:

private void MeasureExecutionTime(Runnable r) {
    r.run();
}

...


MeasureExecutionTime(new Runnable() { public void run() { m(); } });
Run Code Online (Sandbox Code Playgroud)

  • 请参阅java.lang.reflect.Method. (3认同)