Статьи

Интерфейс Java — путешествие за годы к Java 9 — стандартные и частные методы

Вступление

Интерфейс в Java развивался по сравнению с выпусками Java в большей степени в Java 8 и Java 9. В этой статье мы рассмотрим, как интерфейс был до Java 8 и как он был улучшен в Java 8 и Java 9.

Интерфейс до Java 8

Интерфейс будет иметь один или несколько абстрактных методов, как показано ниже:

1
2
3
public interface MyInterface {
  public void doSomething();
}

И его реализация будет:

01
02
03
04
05
06
07
08
09
10
11
12
public class MyImplementation implements MyInterface{
 
  public void doSomething() {
    System.out.println("Done in MyImplementation");
  }
 
  public static void main(String[] args) {
    MyImplementation impl = new MyImplementation();
    impl.doSomething();
  }
 
}

Интерфейс в Java 8

В Java 8, чтобы расширить API коллекций для поддержки лямбда-выражений и новых методов, интерфейс java.util.Collection должен был быть улучшен. Это будет означать нарушение всего того кода, который реализует этот интерфейс. Таким образом, они придумали нечто, называемое методами по default в интерфейсе

Так что теперь интерфейсы могут иметь методы с реализациями и, таким образом, предоставлять возможности для расширения интерфейсов

1
2
3
4
5
6
7
public interface MyInterface {
  public void doSomething();
 
  public default void doTheDefaultThing() {
    System.out.println("Done in a default way!");
  }
}

Интерфейс в Java 9

Даже после методов по default в интерфейсе было небольшое ограничение, заключающееся в отсутствии конструкций для разделения кода между методами по default .
В Java 9 они представили private методы, которые облегчают совместное использование кода между неабстрактными методами в интерфейсе:

01
02
03
04
05
06
07
08
09
10
11
12
public interface MyInterface {
  public void doSomething();
 
  public default void doTheDefaultThing() {
    System.out.println("Done in a default way!");
    helper();
  }
 
  private void helper() {
    System.out.println("Calling the helper!!!");
  }
}

И вышеупомянутые улучшения интерфейса в действии:

1
2
3
4
5
public static void main(String[] args) {
  MyImplementation impl = new MyImplementation();
  impl.doSomething();
  impl.doTheDefaultThing();
}

Вывод

Команда JDK явно сделала интерфейсы намного более мощными, чем они были до Java8, а также открыла способ улучшить интерфейсы в библиотеках, не нарушая клиентский код.

Опубликовано на Java Code Geeks с разрешения Мохамеда Санауллы, партнера нашей программы JCG . См. Оригинальную статью здесь: Интерфейс Java — путешествие за годы к Java 9 — стандартные и частные методы

Мнения, высказанные участниками Java Code Geeks, являются их собственными.