Почему методы по умолчанию включали интерфейсы в Java 8 вместо добавления дополнительных интерфейсов в Collection Framework?

Обычно интерфейс будет заморожен после выпуска в производство.

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

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

Однако в Java 8 реализации интерфейсов по умолчанию были введены для интерфейсов, что позволило задать дополнительные методы в существующих интерфейсах для обеспечения обратной совместимости. Однако я не понимаю, почему вы выбрали бы этот вариант по сравнению с предыдущим - и при этом открывайте для серьезных ошибок с точки зрения создания кода низкого качества.

Может ли кто-нибудь уточнить это?

1 ответ

Очевидно, что наиболее важной причиной введения методов по умолчанию в Java8 является обратная совместимость. Как вы упомянули, перед этой возможностью, чтобы добавить новый метод в интерфейсный класс, мы должны создать унаследованный класс, и это абсолютно не эффективный способ. Потому что это заставило разработчиков изменять все типы объектов, если они хотели использовать недавно разработанные функции.

Чтобы понять важность метода по умолчанию, подумайте, сколько изменений нужно было добавить forEach метод для Iterable интерфейс. Как Вам известно Iterable является родителем Collection который является родителем всех существующих типов списков в Java. Какое огромное изменение потребовалось, чтобы добавить простой метод к Iterable без представления default метод!

Кроме того, сейчас я использую стандартные методы для сокращения написания кода, и я не знаю, почему это не упоминается ни на одном веб-сайте. Поведение метода может быть одинаковым в некоторых унаследованных классах, и я могу легко реализовать поведение в родительском интерфейсе, используя метод по умолчанию, и четко изменить поведение везде, где я хочу. Однако это не имеет большого значения, но это действительно заставляет меня чувствовать себя комфортно с развитием.

Другие вопросы по тегам