views:

167

answers:

3

Suppose I have:

  public class OuterClass() {

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

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

How do I resolve the ambiguity between the someMethod() of the outer class and the someMethod() of the inner class?

A: 

Short of renaming any ambiguous methods, you could rely on the reader's understanding of closures.

Evan Meagher
+7  A: 

You can refer to the outer with OuterClass.this, or call the method with OuterClass.this.method().

However, as a point of design, sharing the name is confusing, to say the least. It might be reasonable if the inner class represented an extension or, say, a concrete implementation of an abstract method, but that would be clearer by calling super.method. Calling a super method directly, (as it looks like you're intending to do?), is confusing.

Steve B.
+1 for "you don't really need to name it this way, do you?"
matt b
+4  A: 

Scope it to the outer class with 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);
  }
}
SingleShot
Aw... Steve B. posted the same answer just before me. I will leave mine here for the example code.
SingleShot