В первой статье этой серии вы увидели новый метод в нашем списке, forEach. Но до Java 7 этого метода не существовало ... как это произошло?
Мы знаем, что если бы этот метод был объявлен в интерфейсе, у нас могла бы возникнуть большая проблема!
Что?
Каждому, кто реализовал интерфейс, необходимо его реализовать.
Будет установлен хаос, работа будет огромной, сообщество Java сошло бы с ума.
Интерфейс типа List уничтожит библиотеки, используемые большинством из нас, такие как Hibernate.
Добро пожаловать в ад «NoSuchMethodErrors»!
НО… мы получили новую функцию в Java 8!
Методы по умолчанию
С помощью этой функции мы можем добавить метод к интерфейсу и убедиться, что он реализован во всех реализациях. :)
Например, используемый нами метод forEach объявлен внутри java.lang.Iterable, который является родительским для Collection , в свою очередь, родительский элемент List.
Если мы посмотрим на метод в интерфейсе, то обнаружим:
default void forEach(Consumer <? Super T> action) { Objects.requireNonNull (action); for (T t: this) { action.accept (t); } }
Да, я думаю, вы этого не ожидали, метод с кодом внутри интерфейсов ..
Поскольку ArrayList реализует List, который является (косвенным) дочерним элементом Iterable,
ArrayList имеет этот метод, хочет он того или нет. По этой причине мы можем это сделать:
books.forEach(b -> System.out.println(b.getName()));
Это чтение служит объяснением первой статьи, в которой использовалась эта новая функция.
До свидания, до встречи!
Ссылки:
https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html