Como acessar uma classe que tem o mesmo nome que a classe método local interno de uma classe diferente

Nikunj Gupta:

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.

Lino:

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 Aem 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 Objectcomo o tipo de a3porque não há nenhuma maneira para fazer referência ao exterior Adentro de main()uma vez que a classe local Afoi declarado.

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=225074&siteId=1
Recomendado
Clasificación