Могу ли я в Android AppCompatActivity реализовать абстрактный метод каждым подклассом, расширяющим BaseActivity?

Скажем, у меня есть базовый класс BaseActivity, который расширяет AppCompatActivity. Внутри BaseActivity у меня есть:

public abstract class BaseActivity extends AppCompatActivity {

    protected abstract void setUp();

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setUp();
    }
}

Затем все мои классы Activity расширяют BaseActivity следующим образом:

public class MainActivity extends BaseActivity implements SwipeRefreshLayout.OnRefreshListener {

    private ActivityMainBinding mBinding;
    private FeedTopicsFragment mFeedTopicsFragment;
    private UserDiscussionsFragment mUserDiscussionsFragment;
    private UserConversationsFragment mUserConversationsFragment;
    private final String TAG = getClass().getSimpleName();

    @Override
    protected void setUp() {
        mBinding = DataBindingUtil.setContentView(MainActivity.this, R.layout.activity_main);
        String signedInUserId = SessionPersistor.getSignedInUserId();
        if (signedInUserId == null) {
            NavigationHelper.goToSignInUserActivity(this);
            return;
        }
        setSupportActionBar(mBinding.activityMainAppbar);
        // do other stuff to mBinding etc, all at the beginning of onCreate
    }

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        loadData();   
    }
}

Возможна ли вообще такая реализация? Я хочу избавить меня от лишних хлопот, связанных с тем, что я не забываю каждый раз вызывать setUp, поскольку для каждого действия это одно и то же: в onCreate мне нужно настроить представления и т. д. Будет ли это вызывать исключение, потому что setUp - абстрактный метод, но он вызывается в BaseActivity onCreate, но в то время, когда setUp вызывается из MainActivity, setUp уже реализован в MainActivity, просто порядок вызова setUp определяется в методе BaseActivityonCreate?

в чем проблема, когда вы запускаете приведенный выше код?

Raghunandan 16.03.2018 12:04

ошибки нет, я просто спрашиваю, не является ли это плохой практикой

bycfly 16.03.2018 12:07

нет. я не вижу ничего плохого в подходе

Raghunandan 16.03.2018 12:09

Все ок, хорошее использование полиморфизма

maheryhaja 16.03.2018 12:25
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
4
384
1

Ответы 1

вы можете вызвать setup из onCreate BaseActivity.

Другие вопросы по теме