別のクラスのメソッドローカルインナークラスと同じ名前を持つクラスにアクセスする方法

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は、メソッドローカルインナークラスを作成した後、私は)(主内側外側クラス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@___
     }
}

ローカルクラスとしてこの作品AB.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=225075&siteId=1
おすすめ