透過反射在Java 中實例化巢狀類別
無法使用標準反射方法實例化所提供的Java 程式碼中定義的內部類別是Java 開發人員面臨的常見陷阱。當嘗試直接使用 Class.newInstance() 建立實例時,由於存在表示封閉類別實例的隱藏參數而出現問題。
要成功實例化內部類,有必要使用Class.getDeclaredConstructor() 存取建構子並提供封閉類別的實例作為參數。以下程式碼片段說明了這種方法:
<code class="java">// Exceptions omitted for brevity Class<?> enclosingClass = Class.forName("com.mycompany.Mother"); Object enclosingInstance = enclosingClass.newInstance(); Class<?> innerClass = Class.forName("com.mycompany.Mother$Child"); Constructor<?> ctor = innerClass.getDeclaredConstructor(enclosingClass); Object innerInstance = ctor.newInstance(enclosingInstance);</code>
或者,如果巢狀類別不依賴封閉實例,則更直接的解決方案是將其聲明為靜態巢狀類別:
<code class="java">public class Mother { public static class Child { public void doStuff() { // ... } } }</code>
透過利用這些方法,開發人員可以使用Java 中的反射有效地實例化依賴和獨立內部類別。
以上是如何使用反射在 Java 中實例化巢狀類別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!