다른 클래스의 방법 지역 내부 클래스와 동일한 이름을 가진 클래스에 액세스하는 방법

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선언되었습니다.

추천

출처http://43.154.161.224:23101/article/api/json?id=225073&siteId=1