2012-05-01 63 views
2

有沒有在Java反射調用getMethod或其他一個不會拋出異常,如果找不到方法的方法嗎?也許只是返回一個null而已?反射getMethod沒有導致異常

我正在通過一個應用程序來減少預期的異常,這似乎是一個可能的候選人。

+3

當然,如果你用自己的方法包裝呼叫,你可以做任何你想做的事情。 – Perception

+3

「try-catch」塊有什麼問題? – beerbajay

+0

也許我錯了,但有預期的異常感覺就像代碼味道。 –

回答

3

您可以通過的getMethods迭代()和返回null如果你沒有找到一個匹配。

+1

我打算用這個解決方案和一個緩存。謝謝。 –

+1

Reflection API也使用其自己的SoftReferenced緩存。 –

0

如果您還沒有閱讀過此article,請查看。

Android開發人員的網站似乎沒有使用try-catch塊來實現此效果的問題...我認爲你應該沒問題。

如果跨多個SDK兼容性是你的主要關注點,可以按如下能夠通過包裝你的代碼,以避免反射都聚集在if-else塊:

if (currentAPIVersion >= android.os.Build.VERSION_CODES.FROYO){ 
    // Do something for froyo and above versions 
} else{ 
    // do something for phones running an SDK before froyo 
} 
1

根據您的應用需求,可能適合使用getMethods()。它會返回類中所有已定義方法的數組。您可以通過名稱映射返回的方法,或者按照您的喜好使用它們。 但是,請注意,這可能比調用getMethod()僅需要您所需的方法並最終捕獲異常要慢。在這種情況下,緩存可能有所幫助。

+0

@彼得:真的很難相似的答案,只是沒有讀你的寫作我的... –