我有一个func a(x, y z)
想要时间,有没有办法解决这个问题:
time = timeit( a(x,y,z) )
,它接受任何函数的时间。
像:
long timeit(Object func){
long startTime = System.currentTimeMillis();
func(...);
return System.currentTimeMillis() - startTime;
}
答案 0 :(得分: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(); }
}
答案 1 :(得分: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[]{});
答案 2 :(得分:0)
如何用一个方法定义一个接口(比如说FunctionRunner)(让我们称之为run())。现在,您可以实现此接口,并在调用run()时执行您想要执行的任何操作。然后你的代码来衡量一个函数的时间就像这样:
long timeit(FunctionRunner func){
long startTime = System.currentTimeMillis();
func.run();
return System.currentTimeMillis() - startTime;
}