2012-11-14 57 views
1

是否有可能創建一個方法,通過在Java中引用另一個方法?是否有可能創建一個在Java中輸入方法的方法?

我在想是這樣的:

int timeMethod(method myMethod) { 
     long start = time 
     run myMethod 
     long end = time 
     return end-start 
    } 
+0

謝謝你所有的好評。我會嘗試解決方案,然後標出最好的一個。另外,感謝jigar joshi格式化我的問題。我無法弄清楚爲什麼我的4個空間不工作。我聽起來像一個奧斯卡得主,哈哈。 – Nate711

+1

你的4個空格不工作,因爲你需要在代碼之前和之後有一個空行。 –

+0

可能重複的[我可以傳遞一個方法作爲參數的另一種方法在Java?](http://stackoverflow.com/questions/6061049/can-i-pass-a-method-as-parameter-of-another-方法-在-java的) – Eric

回答

3

你可以用你的方法調用在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(...); 
    } 
}); 
1

你可以使用System.currentTimeMillis();開始和也做了該方法的結束,兩者相減就像你提到的。

public void timeExtensiveMethod() { 
    long start = System.currentTimeMillis(); 
    //do stuff 
    long end = System.currentTimeMillis(); 
    System.out.println("Time taken: " + (end - start)); 
} 

請注意,並非所有上述變量都需要,它們只是在那裏顯示思維過程。

3

AOP(AspectJ實現)是你試圖重塑什麼,here是描述在Java中,例如

-1

沒有快速谷歌鏈接,您作爲參數着通法

1

有沒有這樣的事情是功能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

1

是的,這是可能的,但是我相信你應該用一個真正的分析器,而這樣的「傻」之一。

你將不得不使用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; 
} 
相關問題