/ / защо методите по подразбиране по подразбиране? - java, java-8, default-метод

защо методите на интерфейс по подразбиране? - java, java-8, default-метод

Обучение на Java 8 по подразбиране. Това връзка като всеки друг ресурс в интернет казва

В "най-строгия смисъл", методите по подразбиране са aстъпка назад, защото те ви позволяват да „замърсявате“ интерфейсите си с код. Но те предоставят най-елегантния и практичен начин да се даде възможност за назад съвместимост. Тя направи много по-лесно за Oracle да актуализира всички Класове колекции и за вас да преоборудвате съществуващия си код Lambda.

Моето разбиране е, че Java 8 dev / дизайнерипри условие, че по подразбиране метод в интерфейси, така че всички изпълняващи клас не трябва да ненужно пренебрегват същото поведение, като по този начин осигуряват обратна съвместимост. Например: - ако методът ForEach не би бил метод по подразбиране, всеки клас за изпълнение на колекция трябваше да го приложи. Съгласен.

За да преодолеем това, бихме могли да имаме един класОсигуряване на изпълнението на тези методи по подразбиране и след това прилагане на клас като араилист и т.н. удължи това. По този начин бихме могли да обобщим и двете фундаментални характеристики на java, т.е. възможността за повторно използване и абстракция, т.е.

Сигурен съм, че java 8 dev / designer вече имамислех за това, тъй като те са много по-научени и аз липсва нещо тук. Може ли някой да помогне тук, така че разработчиците да могат да бъдат и на върха на тази голяма промяна?

Отговори:

5 за отговор № 1

За да се преодолее това, бихме могли да имаме един клас, осигуряващ реализация на тези методи по подразбиране, а след това да приложим клас като аррейлист и т.н.

Вашето предложение ще работи само за стандартни класове JDK (тъй като те обикновено разширяват някои базови класове като AbstractCollection и AbstractListмогат да се добавят и новите методи).

Какво ще кажете за потребителски класове, които реализират JDK интерфейси? Ако например имате клас, който изпълнява List но не разширява някои JDK List реализация, трябва да можете да превключите на Java 8 без да се налага да въвеждате нови методи във вашия клас.

с default внедряване на нови методи в. \ t List интерфейс, не трябва да докосвате потребителския си клас. По-късно можете да добавите персонализирана реализация към тези методи, ако не сте доволни от изпълнението по подразбиране.


2 за отговор № 2

Преди Java 8, interfaces можеше да има само abstract methods, Прилагането на тези методи трябва да бъде предоставено в отделен клас. Така че, ако трябва да се добави нов метод в interface тогава неговият код за изпълнение трябва да бъде предоставен в класа, който изпълнява същия интерфейс.

За да се преодолее този проблем, Java 8 въведе концепцията за default methods които позволяват на интерфейсите да имат методи с изпълнение, без да засягат класовете, които изпълняват interface.

Най- default methods бяха въведени, за да осигурят обратна сравнимост, така че да съществуват interfaces може да използва ламбда-изразите, без да прилага методите в класа за изпълнение. Default methods също са известни като defender methods или virtual extension methods.


0 за отговор № 3

Ако има изискване за добавяне на нов метод към интерфейс, клиентите, които използват съществуващия интерфейс, ще бъдат разбити, тъй като класът трябва да приложи всички методи в интерфейса.

В този сценарий, по подразбиране и статични методи може да се използва. Тези методи могат да имат нужда от тяло и клиенти, за да не ги прилагат, така че съществуващите изпълнения работят без никакви промени.

Например, ако искате да подобрите интерфейсите, за да добавите методи, които приемат ламбда-изрази, можете да използвате методите по подразбиране.