public void foo(){
throw new Exception("foo");
}
public void bar(){
foo();
}
是否可以檢查方法bar()
爲了知道foo()
被稱爲無try catch
內bar()
檢查的方法?如何使用反射
public void foo(){
throw new Exception("foo");
}
public void bar(){
foo();
}
是否可以檢查方法bar()
爲了知道foo()
被稱爲無try catch
內bar()
檢查的方法?如何使用反射
您可能感興趣的包裝代理內部全班並與InvocationHandler的看着它:
http://www.javalobby.org/java/forums/t18631.html
你的InvocationHandler如果它看到「foo」被立刻之後調用會做一些特別的東西「酒吧「,我猜。
+1非常有趣 – JohnJohnGa
+1 - 提高我的知識的好鏈接。謝謝。但是,它不能保證它顯示被調用的方法已經使用try..catch之類的東西。 – Naved
@Vicente Plata是否意味着我們需要在代理中隨處添加try catch?因爲如果一個方法已經包含try catch,它就不需要了...... – JohnJohnGa
據我所知是關心,有沒有這樣的反射API,它允許看到裏面實現。您只能檢查類中存在的方法,但不能使用方法中寫入的邏輯。
你也可以使用一個方面,或者如果你需要做這在測試看看或的Mockito類似的框架。
這很難說,最好的解決辦法是什麼不知道的,你需要做到這一點的環境。
好像你的意圖是讓你的應用程序代碼的檢查方法的實現,並且條件分支時方法不能使用try-catch
內部。
除非你正在編寫單元測試,讓我打消這樣做的原因有兩個:
1.開發人員應該瞭解他的應用程序邏輯。
你應該已經知道你的代碼做什麼。如果該方法是封閉源API的一部分,請檢查拋出的異常類型的文檔。
2.它增加了不必要的複雜性。
由於 執行的流量取決於方法的實現,你將有一個 應用其行爲取決於自身的 源的狀態。(如更換方法可以創建side-effects,這 使得調試變得更加困難。)
如果您可以通過檢查源代碼或API文檔確定方法的行爲,什麼是需要在運行時驗證?
由於未檢測到已檢查的異常,因此無法編譯。如果它是RuntimeException會更有趣。靜態代碼分析可能有一些答案。 – TJR