Java: Nome ambigüidade entre métodos de classe externa e interna
-
16-09-2019 - |
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?
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.