Java에서 리플렉션을 사용하여 내부 클래스 인스턴스화
문제:
내부 클래스 인스턴스화 시도
<code class="java">Class<?> clazz = Class.forName("com.mycompany.Mother$Child"); Child c = clazz.newInstance();</code>
InstantiationException이 발생합니다.
답변:
내부 클래스를 인스턴스화할 때 다음이 필요합니다. 둘러싸는 클래스의 인스턴스. 이를 달성하려면 Class.getDeclaredConstructor()를 사용하여 생성자를 얻고 바깥쪽 클래스의 인스턴스를 인수로 제공합니다.
예:
<code class="java">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에서 리플렉션을 사용하여 내부 클래스를 인스턴스화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!