首頁  >  文章  >  Java  >  儘管有存取限制,如何在 Java 中使用反射呼叫私有方法?

儘管有存取限制,如何在 Java 中使用反射呼叫私有方法?

Susan Sarandon
Susan Sarandon原創
2024-11-08 22:22:02484瀏覽

How Can I Invoke Private Methods Using Reflection in Java Despite Access Restrictions?

利用反射呼叫私有方法

儘管 Java 對透過反射存取私有方法有限制,但還是有一個解決方案可以克服這個限制。要透過反射呼叫私有方法,可以利用以下方法:

首先,使用 getDeclaredMethod(String methodName) 而不是 getMethod(String methodName) 來取得 私有方法。此方法允許存取當前類別中聲明的公共和私有方法。

然後,為了規避私有方法的預設存取限制,請使用 setAccessible(booleanaccessible) 方法來授予可存取性。透過將accessible設為true,您可以覆寫保護設定並允許呼叫私有方法。

最後,使用invoke(Object object, Object...args)以及所需的物件和任何所需的物件來呼叫私有方法

這是原始問題中提供的程式碼的更新版本:

注意事項:

  • getDeclaredMethod 限制存取目前類別中宣告的方法,而不是繼承的方法。繼承的方法需要遍歷具體的類別層次結構。
  • SecurityManager 可能會阻止 setAccessible 的使用。在這種情況下,請考慮利用 AccessController 或主題將程式碼作為 PrivilegedAction 運行。

以上是儘管有存取限制,如何在 Java 中使用反射呼叫私有方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn