透過反射呼叫私有方法
在Java中,不允許直接反射呼叫私有方法。但是,還有其他方法可以實現此功能。
考慮以下場景,其中最初定義為私有的方法需要透過反射呼叫:
Element node = outerNode.item(0); String methodName = node.getAttribute("method"); String objectName = node.getAttribute("object"); if ("SomeObject".equals(objectName)) object = someObject; else object = this; method = object.getClass().getMethod(methodName, (Class[]) null);
此程式碼嘗試取得對「methodName」屬性指定的私有方法的參考。然而,這種方法會觸發“NoSuchMethodException”,因為私有方法無法透過傳統反射存取。
要克服此限制,我們可以利用 getDeclaredMethod 方法:
Method method = object.getClass().getDeclaredMethod(methodName); method.setAccessible(true); Object r = method.invoke(object);
getDeclaredMethod 方法檢索方法,無論其可見性如何。 setAccessible 方法允許我們繞過私有存取限制並呼叫該方法。
注意事項:
以上是如何在 Java 中使用反射呼叫私有方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!