Почему методы по умолчанию включали интерфейсы в Java 8 вместо добавления дополнительных интерфейсов в Framework Framework? - PullRequest
0 голосов
/ 22 ноября 2018

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

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

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

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

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

1 Ответ

0 голосов
/ 22 ноября 2018

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

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

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

...