一尘不染

如何快速确定Java中是否重写了方法

java

如果可以确定未重写同一类中的另一个方法,则可以对我的方法之一进行优化。这只是一个很小的优化,因此反射是不可能的。我是否应该只创建一个受保护的方法,该方法返回是否覆盖了所讨论的方法,以便子类可以使其返回true?


阅读 585

收藏
2020-09-08

共1个答案

一尘不染

我不会的 它违反了封装,并且在实现者不知道的情况下更改了类应该执行的约定。

但是,如果必须这样做,最好的方法是调用

class.getMethod("myMethod").getDeclaringClass();

如果返回的类是您自己的,则不会被覆盖;如果还有其他内容,则该子类已覆盖它。是的,这只是反思,但仍然很便宜。

不过,我确实喜欢您的保护方法。看起来像这样:

public class ExpensiveStrategy {
  public void expensiveMethod() {
    // ...
    if (employOptimization()) {
      // take a shortcut
    }
  }

  protected boolean employOptimization() {
    return false;
  }
}

public class TargetedStrategy extends ExpensiveStrategy {
  @Override
  protected boolean employOptimization() {
    return true; // Now we can shortcut ExpensiveStrategy.
  }
}
2020-09-08