Considere o seguinte código
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 classe A e classe B não estão dentro de qualquer embalagem, Como se pode criar o objecto da classe externa Um dentro principal () após o método de classe interna local é criado. Em outras palavras, como posso criar o objeto "A2", um objeto da classe externa A?
Eu verifiquei isso colocando essas classes em um pacote, e eu era capaz de criar o objeto da classe externa Um usando o nome totalmente qualificado. Mas, não conseguia encontrar uma maneira de fazer o mesmo quando eles não estão dentro de qualquer pacote.
Você pode usar Class.forName()
para carregar a classe que você gostaria de criar uma instância:
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@___
}
}
Isso funciona, como a classe local A
em B.main()
tem um nome de domínio totalmente qualificado diferente como a declarada no mesmo nível que B
:
System.out.println(a1.getClass()); // class A
System.out.println(a2.getClass()); // class B$1A
System.out.println(a3.getClass()); // class A
Eu tive de usar Object
como o tipo de a3
porque não há nenhuma maneira para fazer referência ao exterior A
dentro de main()
uma vez que a classe local A
foi declarado.