Java: операторы процесса, которые находятся внутри переопределенного метода - PullRequest
1 голос
/ 07 марта 2012

Итак, у меня есть базовый класс X и класс Y, который расширяет его.У меня есть ряд методов в классе X, которые все переопределены в классе Y, я хотел бы поместить несколько операторов в один из этих методов, которые вызываются даже при переопределении метода, без необходимости помещать дополнительный код в класс Y.

Есть ли способ сделать это?

public class X
 {
     protected void method()
         {
             // vital statements;
         }
 }

public class Y extends X
 {
     protected void method()
             {
             /* vital statements still need to happen
             * would rather not have to call it
             * in every single class that extends X
             */
             // non vital statement;
         }
 }

Ответы [ 3 ]

4 голосов
/ 07 марта 2012

Вам нужен шаблонный метод http://en.wikipedia.org/wiki/Template_method_pattern

В методе шаблона будет вызван Vital оператор

public class X {
  final void template() {
    Vital statement;
    method();
  }

  void method() {
    // do something;
  }
}

public class Y extends X {
  @Override
  void method() {
    // specific code to the class Y
  }
}
3 голосов
/ 07 марта 2012

Обычный и, по сути, единственный способ сделать это - использовать ключевое слово super:

     protected void method()
     {
         super.method();
         non vital statement;
     }

Я говорю «по существу только», потому что есть другие способы сделать это, но они требуют большего изменения. Один из методов - сделать центральный метод финальным и общедоступным (чтобы его можно было вызывать, но не переопределять), и вызывать защищенный абстрактный метод (который можно переопределять, но не вызывать). Затем люди могут настроить поведение подкласса, переопределив только абстрактный метод. Это называется шаблоном метода шаблона.

Третий способ достичь желаемого - использовать аспекты . Используя аспектно-ориентированное программирование, ваши «жизненные операторы» могут быть добавлены к методам подкласса во время выполнения или компиляции время, используя некоторую закулисную магию байт-кода. Это требует некоторого специального инструментария и добавляет некоторую сложность вашей системе сборки, но имеет то преимущество, что она полностью невидима для авторов подклассов.

1 голос
/ 07 марта 2012

Нет, это невозможно.Вам нужно будет найти другой способ добиться того, чего вы хотите, возможно, с помощью шаблонного метода .

...