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

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

回答:

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

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

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.

}

}

以上是 如何快速确定Java中是否重写了方法 的全部内容, 来源链接: utcz.com/qa/418462.html

回到顶部