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@___
}
}
ローカルクラスとしてこの作品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
宣言されています。