Могу ли я всегда полагаться на эти места вставки кода в сгенерированном коде?
Нет, иногда вы не хотите вызывать super.method
.Иногда вы хотите позвонить первым, иногда на последнем месте и т. Д. Это зависит.Но я говорю о методах, без конструкторов.
Есть ли простое правило / объяснение, когда вызывать super ()?
Вы всегда должны будете набрать все super
, как и предыдущие ответы.Единственный случай, когда вы не вызываете super, это когда конструктор суперкласса не имеет параметров;в этом случае компилятор поставит для вас super
.
Я не понимаю точно, что суперкласс делает в каждом случае, поэтому я всегда вставляю свой код в точное местоположение// Теги TODO
Если вы сомневаетесь (я говорю о супер-методах), вы всегда можете взглянуть на исходный код.Google Code Search - хороший ресурс для этого.Затем вы можете решить, помещать ли ваш код до или после метода super;или даже не ставьте метод super вообще.
Имейте в виду, что не добавление метода super допустимо во время компиляции.Но некоторые методы на Android не будут работать, если вы не вызовете метод super (например, метод onResume
класса Activity
).
Кроме того, иногда вы решаете, запускать ли superметод или нет во время выполнения.Рассмотрим классический пример:
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if( KeyEvent.KEYCODE_BACK == event.getKeyCode() ){
return true;
}
return super.onKeyUp(keyCode, event);
}
Если пользователь нажал клавишу возврата, вы не вызовете супер-метод.Если пользователь этого не сделал, вы делегируете работу методу super.