2011-09-24 81 views
3
public void foo(){ 
    throw new Exception("foo"); 
} 


public void bar(){ 
    foo(); 
} 

是否可以檢查方法bar()爲了知道foo()被稱爲無try catchbar()檢查的方法?如何使用反射

+0

由於未檢測到已檢查的異常,因此無法編譯。如果它是RuntimeException會更有趣。靜態代碼分析可能有一些答案。 – TJR

回答

7

您可能感興趣的包裝代理內部全班並與InvocationHandler的看着它:

http://www.javalobby.org/java/forums/t18631.html

你的InvocationHandler如果它看到「foo」被立刻之後調用會做一些特別的東西「酒吧「,我猜。

+0

+1非常有趣 – JohnJohnGa

+0

+1 - 提高我的知識的好鏈接。謝謝。但是,它不能保證它顯示被調用的方法已經使用try..catch之類的東西。 – Naved

+0

@Vicente Plata是否意味着我們需要在代理中隨處添加try catch?因爲如果一個方法已經包含try catch,它就不需要了...... – JohnJohnGa

0

據我所知是關心,有沒有這樣的反射API,它允許看到裏面實現。您只能檢查類中存在的方法,但不能使用方法中寫入的邏輯。

0

你也可以使用一個方面,或者如果你需要做這在測試看看或的Mockito類似的框架。

這很難說,最好的解決辦法是什麼不知道的,你需要做到這一點的環境。

3

好像你的意圖是讓你的應用程序代碼的檢查方法的實現,並且條件分支時方法不能使用try-catch內部。

除非你正在編寫單元測試,讓我打消這樣做的原因有兩個:

1.開發人員應該瞭解他的應用程序邏輯。

你應該已經知道你的代碼做什麼。如果該方法是封閉源API的一部分,請檢查拋出的異常類型的文檔。

2.它增加了不必要的複雜性。

由於 執行的流量取決於方法的實現,你將有一個 應用其行爲取決於自身的 源的狀態。(如更換方法可以創建side-effects,這 使得調試變得更加困難。)

如果您可以通過檢查源代碼或API文檔確定方法的行爲,什麼是需要在運行時驗證?