2

我有一个func a(x, y z)想计时的,有没有办法做到这一点:

time = timeit( a(x,y,z) )在java中,时间它会接受任何函数。

像:

long timeit(Object func){
    long startTime = System.currentTimeMillis();
    func(...);
    return System.currentTimeMillis() - startTime;
}
4

3 回答 3

5

您需要将函数放在Runnable接口中,public void run()方法中。修改后的代码:

public long timeit(Runnable func)
{
    long startTime = System.currentTimeMillis();
    func.run();
    return System.currentTimeMillis() - startTime;
}

功能:

public class MyFunction implements Runnable
{
    @Override public void run() { System.out.println(); }
}
于 2013-08-08T14:48:32.410 回答
1

使用反射:

如果functionCall()是实例方法
-> 为该类创建一个对象
-> 使用该类的对象调用方法

MyClass objToPass = new MyClass();
Method m;
//Assuming functionCall() takes no arguments
m = MyClass.class.getMethod("functionCall", new Class[]{});
//Parameter list empty
m.invoke(objToPass, new Object[]{});
于 2013-08-08T15:10:23.863 回答
0

用一种方法(我们称之为run())定义一个接口(比如说FunctionRunner)怎么样。现在你可以实现这个接口并在 run() 被调用时做任何你想做的事情。然后你的代码来衡量一个函数的时间是这样的:

long timeit(FunctionRunner func){
    long startTime = System.currentTimeMillis();
    func.run();
    return System.currentTimeMillis() - startTime;
}
于 2013-08-08T14:50:09.807 回答