2014-01-19 2 views

답변

2

당신은 이런 식으로 할 수 없습니다 - 당신이 getClass()를 사용해야하는 경우, 당신은 전체 반사 경로를해야 . 클래스가 컴파일 타임에 알려진 경우

,이 작업을 수행 할 수 있습니다

Class1.Class2 obj2 = new Class1.Class2(); 

를 클래스가 컴파일 타임에 알 수없는 경우, 당신은이 작업을 수행 :

Class inner = null; 
for (Class c : obj1.getClass().getDeclaredClasses()) { 
    if ("myPackage.Class1.Class2".equals(c.getName())) { 
     inner = c; 
     break; 
    } 
} 
Object obj2 = inner.newInstance(); 
+0

이미 완전한 클래스 이름''myPackage.Class1.Class2 "'를 알고 싶다면'Class1.Class2.class' 만 사용할 수도 있습니다. "특정 멤버 클래스를 가짐"은 Java 클래스의 인터페이스의 일부가 아닙니다. 그러나 메소드가 'Class2'라는 멤버 클래스가있는 클래스에서만 작동하면 접근 방식이 효과적 일 수 있습니다. 'c.getSimpleName()'대신'c.getName()'을 사용합니다. –

+0

@ErwinBolwidt 여기서 문자열 리터럴로 사용한 문자열은 구성 파일에서 가져올 수 있습니다. 클래스의 전체 이름을 아는 경우 클래스에 대한 정적 참조 ('Class1.Class2.class')를 사용하거나 단순히'new Class1.Class2()'를 사용하는 것에 동의합니다. – dasblinkenlight

관련 문제