如果我可以确定同一类中的另一个方法没有被覆盖,那么我可以对我的其中一个方法应用可能的优化。这只是一个轻微的优化,所以反射是不可能的。我是否应该创建一个受保护的方法来返回该方法是否被重写,以便子类可以使其返回 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.
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)