자바에서 이와 같은 작업을 할 수 있습니까?자바 - 개체의 내부 클래스의 개체를 만들 수 있습니까?
class Class1 {
static class Class2 {
}
}
Class1 obj1 = new Class1();
Class1.Class2 obj2 = new obj1.getClass().Class2();
자바에서 이와 같은 작업을 할 수 있습니까?자바 - 개체의 내부 클래스의 개체를 만들 수 있습니까?
class Class1 {
static class Class2 {
}
}
Class1 obj1 = new Class1();
Class1.Class2 obj2 = new obj1.getClass().Class2();
당신은 이런 식으로 할 수 없습니다 - 당신이 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();
이미 완전한 클래스 이름''myPackage.Class1.Class2 "'를 알고 싶다면'Class1.Class2.class' 만 사용할 수도 있습니다. "특정 멤버 클래스를 가짐"은 Java 클래스의 인터페이스의 일부가 아닙니다. 그러나 메소드가 'Class2'라는 멤버 클래스가있는 클래스에서만 작동하면 접근 방식이 효과적 일 수 있습니다. 'c.getSimpleName()'대신'c.getName()'을 사용합니다. –
@ErwinBolwidt 여기서 문자열 리터럴로 사용한 문자열은 구성 파일에서 가져올 수 있습니다. 클래스의 전체 이름을 아는 경우 클래스에 대한 정적 참조 ('Class1.Class2.class')를 사용하거나 단순히'new Class1.Class2()'를 사용하는 것에 동의합니다. – dasblinkenlight
자바에서는 내부 클래스의 개체를 만들 수 있습니다. 당신은 다음을 수행 할 수 있습니다
Class1.Class2 obj2 = new Class1.Class2();
더 많은 정보는 링크를 따라해야하는 경우 : http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html
Class2의가 아니다 내부 클래스 그것은 중첩 된 정적 클래스입니다. 외부 클래스의 인스턴스가 필요 없으면이 방법을 사용하십시오.
import xxx.Class1.Class2;
...
Class2 obj2 = new Class2();
참조 http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html
Java 컴파일러는 무엇을 말합니까? –
Stackoverflow가 컴파일러가 아닙니다 ... – regulus