bgw*_*bgw 17 java oop methods optimization overriding
如果我可以确定同一类中的另一个方法没有被覆盖,那么可以对我的一个方法应用可能的优化.这只是一个小小的优化,所以反思是不可能的.我是否应该创建一个受保护的方法来返回有问题的方法是否被覆盖,这样子类可以使它返回true?
Joh*_*lla 33
我不会这样做.它违反了封装并改变了你的类应该做的事情的合同,而没有实施者知道它.
但是,如果必须这样做,最好的方法是调用
class.getMethod("myMethod").getDeclaringClass();
Run Code Online (Sandbox Code Playgroud)
如果返回的类是您自己的类,那么它不会被覆盖; 如果它是别的东西,那个子类已经覆盖了它.是的,这是反思,但它仍然相当便宜.
不过,我确实喜欢你的受保护方法.这看起来像这样:
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.
}
}
Run Code Online (Sandbox Code Playgroud)
好吧,我的优化是逐个案例的小收益,它只会加速很多东西,因为它每秒被调用数百次.
您可能希望了解Java优化器可以执行的操作.您的手动编码优化可能没有必要.
如果您认为手动编码优化是必要的,那么您描述的受保护方法方法并不是一个好主意,因为它暴露了您的实现细节.
| 归档时间: |
|
| 查看次数: |
16254 次 |
| 最近记录: |