Considere el siguiente 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@____
}
}
La clase A y clase B no son dentro de cualquier paquete, ¿Cómo puedo crear el objeto de la clase A exterior dentro de main () después de crear la clase interna local de método. En otras palabras, ¿cómo puedo crear el objeto "a2", un objeto de la clase A exterior?
Comprobé esto poniendo estas clases en un paquete, y yo era capaz de crear el objeto de la clase A externa utilizando el nombre completo. Sin embargo, no pudo encontrar una manera de hacer lo mismo cuando no están dentro de cualquier paquete.
Se puede utilizar Class.forName()
para cargar la clase que le gustaría crear una instancia de:
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@___
}
}
Estos trabajos, como la clase local A
en B.main()
tiene un nombre de dominio completo diferente a la declarada en el mismo nivel como B
:
System.out.println(a1.getClass()); // class A
System.out.println(a2.getClass()); // class B$1A
System.out.println(a3.getClass()); // class A
Yo he tenido que usar Object
como el tipo de a3
porque no hay manera de hacer referencia al exterior A
en el interior main()
una vez que la clase local A
ha sido declarada.