Domanda

Supponiamo che io sono:

public class OuterClass() {

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

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

Come posso risolvere l'ambiguità tra il someMethod() della classe esterna e la someMethod() della classe interna?

È stato utile?

Soluzione

È possibile fare riferimento a quello esterno con OuterClass.this, o chiamare il metodo con OuterClass.this.method().

Tuttavia, come un punto di progettazione, condividendo il nome è fonte di confusione, per non dire altro. Potrebbe essere ragionevole se la classe interna ha rappresentato un ampliamento o, diciamo, un'implementazione concreta di un metodo astratto, ma che sarebbe più chiaro chiamando super.method. Chiamando un metodo eccellente direttamente, (come sembra che avete intenzione di fare?), È fonte di confusione.

Altri suggerimenti

Scope alla classe esterna con 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);
  }
}

Rinominare ambiguità è una buona pratica. Soprattutto se lo si applica nell'architettura verso l'alto e all'indietro.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top