安卓是如何获得的;android.app.SuperNotCalledException“;?
我很好奇android如何检测我是否在安卓是如何获得的;android.app.SuperNotCalledException“;?,android,exception,Android,Exception,我很好奇android如何检测我是否在onCreate方法中调用了super.onCreate(或其他一些方法) 我猜它使用了一个标志,并看到一个标志boolean-mCalled,但不确定是否用于此检测。如果是的话,那么它会让我感到困惑,因为有很多超级方法要重写,但这些方法只有一个“mCalled”标志来检测是否调用了超级方法,这似乎是不可能的 thx for reply ~模式的工作原理如下: private boolean superCalled; private someFunctio
onCreate
方法中调用了super.onCreate
(或其他一些方法)
我猜它使用了一个标志,并看到一个标志boolean-mCalled代码>,但不确定是否用于此检测。如果是的话,那么它会让我感到困惑,因为有很多超级方法要重写,但这些方法只有一个“mCalled”标志来检测是否调用了超级方法,这似乎是不可能的
thx for reply ~模式的工作原理如下:
private boolean superCalled;
private someFunction(...) {
superCalled = false;
someMethodThatRequiresSuperToBeCalled(...);
if (!superCalled) {
throw new SuperNotCalledException();
}
}
protected void someMethodThatRequiresSuperToBeCalled(...) {
superCalled = true;
}
如果仔细阅读代码,您会发现框架一次只对一个方法使用该标志。因此,尽管有许多方法需要调用super.whatever()
,但它们可以共享相同的标志。您的意思是IDE会在我的重写方法中隐式添加一些代码吗?@user1150712-否。我发布的模式是框架代码的一部分。假设您重写了onCreate
。就在框架为您的活动调用onCreate
之前,它将superCalled
标志设置为false
。当调用返回时,它检查标志是否已设置为true
,如果未设置,则抛出异常。如何找到调用“onCreate”的位置?我在eclipse中尝试了ctrl+alt+h,但显然不起作用。@user1150712-您可以在中找到它。查找performCreate
方法。这实际上是一个不好的示例,因为performCreate
假定标志的默认初始值为false
(尽管您可以看到它是在活动.onCreate中设置的)。更好的例子是其他生命周期方法(performStart
/onStart
,performRestart
/onRestart
等)