防止超级类别(活动)进一步处理子类

时间:2014-05-13 09:44:17

标签: java android inheritance android-activity

我正在为这个问题寻找一个优雅的解决方案/模式(伪代码):

public class LoggedInActivity extends Activity {
    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (!isUserLoggedIn()) {
         finish();
         startActivity(getLoginActivity());
        }
    }

    ...
}


class MainActivity extends LoggedInActivity {
    @Override
    protected void onCreate(final Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       codeThatShouldNotBeExecutedWithoutUser();
    }
}

我正在寻找一种不触及LoggedInActivity的每个子类的方法,并在那里进行检查 - 在理想世界中,我可以完全解决LoggedInActivity中的这个问题 - 但我还没有看到它。

1 个答案:

答案 0 :(得分:1)

解决这个问题的好方法是:

  1. LoggedInActivity成为abstract class
  2. 添加一个抽象方法:

      

    abstract void codeThatShouldNotBeExecutedWithoutUser();

  3. 更改所有子类以实现(并覆盖)codeThatShouldNotBeExecutedWithoutUser()。如果他们已经实现了该方法,您至少应该添加@Override注释,以明确该方法被覆盖。

  4. 从所有子类中删除对codeThatShouldNotBeExecutedWithoutUser()的调用。
  5. 当且仅当用户已登录时,将LoggedInActivity.onCreate()更改为呼叫codeThatShouldNotBeExecutedWithoutUser()

    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (!isUserLoggedIn()) {
           finish();
           startActivity(getLoginActivity());
        } else {
           codeThatShouldNotBeExecutedWithoutUser();
        }
    }