Nikunj 굽타 :
다음 코드를 고려
class A{}
class B{
void main(){
A a1=new A();
class A{}
A a2=new A();
System.out.println(a1); // A@___
System.out.println(a2); // B$1A@____
}
}
클래스 A 및 클래스 B는 I 메소드 로컬 내부 클래스가 생성되는 주 () 후 내측 외측 클래스 A의 객체를 생성 할 수있는 방법은 패키지 내부 아니다. 즉, 어떻게, 외부 클래스 A의 객체를 "A2"개체를 만들 수 있습니까?
나는 패키지에서 이러한 클래스를 넣어이를 확인, 나는 완전한 이름을 사용하여 외부 클래스 A의 객체를 생성 할 수 있었다. 그러나, 그들이 어떤 패키지에없는 경우 동일한 작업을 수행 할 수있는 방법을 찾을 수 없습니다.
리노 :
당신은 사용할 수 있습니다 Class.forName()
인스턴스화하고 싶은 클래스를로드 :
class A {}
class B {
public static void main(String[] args) throws Exception {
A a1 = new A();
class A {}
A a2 = new A();
Class<?> clazz = Class.forName("A");
Object a3 = clazz.getDeclaredConstructor().newInstance();
System.out.println(a1); // A@___
System.out.println(a2); // B$1A@____
System.out.println(a3); // A@___
}
}
로컬 클래스로이 작품 A
에서 B.main()
동일한 수준으로 선언 한 것과 다른 정규화 된 도메인 이름이 있습니다 B
:
System.out.println(a1.getClass()); // class A
System.out.println(a2.getClass()); // class B$1A
System.out.println(a3.getClass()); // class A
내가 사용 했어 Object
유형으로 a3
외부 참조 할 수있는 방법이 없기 때문에 A
내부를 main()
로컬 클래스가 한 번 A
선언되었습니다.