Вступление
Интерфейс в 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, являются их собственными. |