Pergunta

Suponha que eu tenho:

public class OuterClass() {

  public class InnerClass {
    public void someMethod(int x) {
      someMethod(x);
    }
  }

  public void someMethod(int x) {
    System.out.println(x);
  }
}

Como posso resolver a ambiguidade entre o someMethod() da classe externa ea someMethod() da classe interna?

Foi útil?

Solução

Você pode se referir ao exterior com OuterClass.this, ou chamar o método com OuterClass.this.method().

No entanto, como um ponto de design, partilha o nome é confuso, para dizer o mínimo. Pode ser razoável se a classe interna representou uma extensão ou, digamos, uma implementação concreta de um método abstrato, mas que seria mais claro chamando super.method. Chamar um método de super diretamente, (como parece que você está pretendendo fazer?), É confuso.

Outras dicas

Scope-lo para a classe externa com OuterClass.this.someMethod():

public class OuterClass {

  public class InnerClass {

    public void someMethod(int x) {
      OuterClass.this.someMethod(x);
    }
  }

  public void someMethod(int x) {
    System.out.println(x);
  }
}

Mudar o nome de ambigüidade é uma boa prática. Especialmente se você aplicá-la na arquitetura cima e para trás.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top