Почему методы жизненного цикла API операций используют RuntimeException, чтобы подклассы вызывали супер методы? - PullRequest
1 голос
/ 17 марта 2011

Android требует, чтобы все подклассы Activity вызывали супер методы из своих методов жизненного цикла. Исключение выдается, если метод super не вызывается. Почему Android использует механизм RuntimeException для принудительного вызова супер-методов. Почему он не использует шаблон проектирования «Шаблон», чтобы супер методы выполнялись автоматически перед дочерними методами. Например, onDestroy () может быть обработан следующим образом: -

Class Activity{

    public void onDestroyFrmwork()
    {
            //do whatever the super onDestroy() method has to do 
            onDestroy();//this will invoke the subclass method.
    }

    public void onDestroy()
    {
        //empty. will get overridden by subclasses.
    }
}

Ответы [ 2 ]

2 голосов
/ 21 февраля 2012

Я знаю, что отвечаю на этот вопрос через 11 месяцев после того, как его спросили. Я предполагаю, что причина в том, что порядок вызова супер-метода не может быть определен заранее. Например, я мог бы захотеть сделать уборку перед вызовом super.onDestroy(), после super.onDestroy() или даже перепутать его следующим образом:

@Override
    protected void onDestroy() {
        // Do some initial clean-up
        preDestroy();

        //Then call super
        super.onDestroy();

        //In the end do some final clean-up
        postDestroy();

    }

Этот пример ради аргумента; но я уверен, что вы натолкнетесь на примеры из реального мира, если будете достаточно пристально смотреть.

Этого смешанного порядка было бы трудно достичь с помощью шаблона проектирования.

0 голосов
/ 17 апреля 2013

Ваше приложение не будет работать правильно, если вы не вызовете методы суперкласса, поэтому API выдает RuntimeException, чтобы убедиться, что вы не забыли это сделать.

...