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