我有一个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;
}
您需要将函数放在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(); }
}
使用反射:
如果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[]{});
用一种方法(我们称之为run())定义一个接口(比如说FunctionRunner)怎么样。现在你可以实现这个接口并在 run() 被调用时做任何你想做的事情。然后你的代码来衡量一个函数的时间是这样的:
long timeit(FunctionRunner func){
long startTime = System.currentTimeMillis();
func.run();
return System.currentTimeMillis() - startTime;
}