外部类和内部类方法之间的名称歧义

问题描述 投票:0回答:3

假设我有:

public class OuterClass() {

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

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

如何解决外部类的

someMethod()
和内部类的
someMethod()
之间的歧义?

java oop inner-classes ambiguity outer-classes
3个回答
13
投票

可以用

OuterClass.this
引用外部,或者用
OuterClass.this.method()
调用方法。

然而,从设计的角度来看,至少可以说,共享名称是令人困惑的。如果内部类代表一个扩展或者抽象方法的具体实现,这可能是合理的,但通过调用 super.method 会更清楚。直接调用超级方法(看起来像您打算这样做?)是令人困惑的。


6
投票

使用

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);
  }
}

1
投票

重命名歧义是一个很好的做法。特别是如果你将它应用在向上和向后的架构中。

© www.soinside.com 2019 - 2024. All rights reserved.