Рубрики
Без рубрики

Устаревший интерфейс

Предположим, вы работаете над очень-очень большим java-проектом. Поздравляю!!! Проблемная сцена… Помеченный java.

Предположим, вы работаете над очень-очень большим java-проектом. Поздравляю!!!

Проблемный сценарий

Внезапно ваш старший подходит к вашему столу и говорит: “Эй, Икс, нам нужно добавить новый метод в XYX интерфейс”.

Внутри твоего мозга

Святое дерьмо!

Невозможно, я не могу этого сделать.

Это нарушит все существующие блоки кода.

Нет, это невозможно.

Почему это невозможно?

Согласно документам oracle , интерфейс java представляет собой группу связанных методов с пустыми телами. Нравится-

interface Bicycle {

    //  wheel revolutions per minute
    void changeCadence(int newValue);

    void changeGear(int newValue);

    void speedUp(int increment);

    void applyBrakes(int decrement);
}

Предположим, уже 100 классов реализуют велосипедный интерфейс. Так, если вы хотите добавить новый метод в интерфейс велосипеда-

  • Вам нужно изменить 100 классов. Заполните тело метода в каждом классе, который реализует интерфейс bicycle.

Может ли это быть приемлемым решением?

Нет, никогда.

Решение

Java 8 представила совершенно новую концепцию для преодоления этой критической ситуации.

Это метод по умолчанию

Используя ключевое слово по умолчанию, вы можете добавить метод complete в интерфейс java ( magic ), это поможет вам сохранить существующий устаревший код нетронутым.

С новым методом по умолчанию в интерфейсе велосипеда-

interface Bicycle {

    void changeCadence(int newValue);

    void changeGear(int newValue);

    void speedUp(int increment);

    void applyBrakes(int decrement);

    //method with body in an interface
    default void saveTheWord(){
      System.out.println("Haha! it is a magic");
    }
}

Теперь вам не нужно изменять 100 существующих классов (при желании вы можете это сделать). Однако после этого момента вновь реализованные классы могут использовать/переопределять этот метод, если захотят.

Расширение Интерфейсов Которые Содержат Методы По Умолчанию

При расширении интерфейса, содержащего метод по умолчанию, можно выполнить следующие действия:

  • Вообще не упоминайте метод по умолчанию, который позволяет вашему расширенному интерфейсу наследовать метод по умолчанию.
  • Повторно объявите метод по умолчанию, который делает его абстрактным.
  • Переопределите метод по умолчанию, который переопределяет его.

Овации

Оригинал: “https://dev.to/khabib97/legacy-interface-edo”