是否有可能創建一個方法,通過在Java中引用另一個方法?是否有可能創建一個在Java中輸入方法的方法?
我在想是這樣的:
int timeMethod(method myMethod) {
long start = time
run myMethod
long end = time
return end-start
}
是否有可能創建一個方法,通過在Java中引用另一個方法?是否有可能創建一個在Java中輸入方法的方法?
我在想是這樣的:
int timeMethod(method myMethod) {
long start = time
run myMethod
long end = time
return end-start
}
你可以用你的方法調用在Runnable
和時間需要多長時間的Runnable
到運行:
long timeMethod(Runnable myMethodRunner) {
long start = System.nanoTime();
myMethodRunner.run();
return System.nanoTime() - start;
}
然後你可以在時間的方法如下:
public void myMethod(...) {
. . .
}
// later:
long timeInNanoSeconds = timeMethod(new Runnable() {
public void run() {
myMethod(...);
}
});
你可以使用System.currentTimeMillis();
開始和也做了該方法的結束,兩者相減就像你提到的。
public void timeExtensiveMethod() {
long start = System.currentTimeMillis();
//do stuff
long end = System.currentTimeMillis();
System.out.println("Time taken: " + (end - start));
}
請注意,並非所有上述變量都需要,它們只是在那裏顯示思維過程。
AOP(AspectJ實現)是你試圖重塑什麼,here是描述在Java中,例如
沒有快速谷歌鏈接,您作爲參數着通法
有沒有這樣的事情是功能Java中的指針(至少不是精確的函數指針)。你可以嘗試像如組成:
int timeMethod(MyClass object) {
long start = System.currentTimeMillis();
object.run(); //this class can implement a common interface and you program to interface not concrete implementation
long duration = System.currentTimeMillis() - start;
return duration;
}
編輯:+1 AOP
是的,這是可能的,但是我相信你應該用一個真正的分析器,而這樣的「傻」之一。
你將不得不使用reflection要調用的方法和System.currentTimeMillis()
或System.nanoTime()
測量經過時間:
long measureMethodExecutionTime(Method method, Object object, Object[] args) {
long startTime = System.currentTimeMillis();
method.invoke(object, args);
return System.currentTimeMillis() - startTime;
}
謝謝你所有的好評。我會嘗試解決方案,然後標出最好的一個。另外,感謝jigar joshi格式化我的問題。我無法弄清楚爲什麼我的4個空間不工作。我聽起來像一個奧斯卡得主,哈哈。 – Nate711
你的4個空格不工作,因爲你需要在代碼之前和之後有一個空行。 –
可能重複的[我可以傳遞一個方法作爲參數的另一種方法在Java?](http://stackoverflow.com/questions/6061049/can-i-pass-a-method-as-parameter-of-another-方法-在-java的) – Eric