当前位置:编程学习 > wap >>

如何确保调用super.XXX()

Android里面有个异常,叫SuperNotCalledException,如果子类没有通过super.XXX()调用父类的方法,则报此异常,请问这是怎么实现的。 --------------------编程问答-------------------- 可以参考Fragment.java,Activity.java等代码,以Fragment.java来说明,
    void performResume() {

        mCalled = false;
        onResume();
        if (!mCalled) {
            throw new SuperNotCalledException("Fragment " + this
                    + " did not call through to super.onResume()");
        }

    }

    public void onResume() {
        mCalled = true;
    }
 


在调用onResume之前先设置变量mCalled 为false,然后调用onResume,而这个mCalled 是在父类(也就是当前调用onResume的类)的onResume中设置为true的,如果子类没有写super.onResume(),自然就不会置为true,然后就可以抛出异常了。 --------------------编程问答-------------------- 比如onPause处理,在ActivityThread.java中,

final Bundle performPauseActivity(ActivityRecord r, boolean finished, boolean saveState) {
......
      if (!r.activity.mCalled) {
          throw new SuperNotCalledException(
              "Activity " + r.intent.getComponent().toShortString() +
              " did not call through to super.onPause()");
      }
......
}

如果对象的mCalled没有被置为true,就抛出SuperNotCalledException异常
补充:移动开发 ,  Android
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,