我们都知道覆盖子类中的方法并忘记调用[super method]
是多么容易。
就我而言,我有:
ClassA (framework class, can not be modified)
ClassB (my own class)
ClassC (user's subclass)
ClassA已经提供了方法doSomething
。为了保持相同的API,我必须覆盖doSomething
并且如果用户决定实现她自己的doSomething
版本,则要求ClassC调用[super doSomething]。
由于这个框架也将被初学者使用,我想知道是否有办法确定方法没有调用它的超级版本,或者甚至可能在编译器抛出警告/错误时用户实现该方法但是不叫超级。
我知道这样做是一种反模式。这只是为了防止用户错误,因为不调用super会导致问题无法轻易固定到丢失的超级呼叫。
我也知道替代方法是将用户暴露给不同的API(即doCustomSomething
)但我仍然无法阻止用户简单地覆盖原来的doSomething
(出于习惯)从而绕过添加到ClassB的任何doSomething
代码。所以这不行。
我主要是想方法通知用户缺少[super doSomething]但是如果有其他方法可以确保在其超类(ClassA)执行doSomething时实际运行ClassB的某些东西,那也可以。我猜也许一些模糊不清的方法可以解决这个问题(再一次,只检测并抛出错误)?