2016-05-20 8 views
0

Я учился lambada и там был пункт, который гласит, что в Java 8 мы можем объявить метод с определением в интерфейсов какпо умолчанию метод в интерфейсе с difination

interface Test { 
       default String method(){ 
         return "string"; 
             } 
       } 

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

как они ведут себя так же, как и обычное определение метода, и программисту нужно объявить тело и часть отдыха?

что фактическая точка, как это кажется немного трудно понять

+0

Вы ** ** может переопределить метод по умолчанию, когда вы * реализовать * в 'interface', но вы не должны. –

+0

Точка «если она имеет такое же поведение, как интерфейс без методов по умолчанию», то почему она находится в ** java8 ** update ?? – emotionlessbananas

+0

должно быть что-то под капотом – emotionlessbananas

ответ

0

благодаря @ElliottFrisch и @kagemusha для подсказки после поиска я получил answer

Почему по умолчанию методы?

List<?> list = … 
list.forEach(…); // lambda code goes here 

в цикле, не заявлен java.util.List ни интерфейса java.util.Collection пока. Одним из очевидных решений было бы просто добавить новый метод к существующему интерфейсу и обеспечить реализацию там, где это требуется в JDK. Однако после опубликования невозможно добавить методы к интерфейсу без нарушения существующей реализации.

Так что было бы очень неприятно, если бы у нас были лямбды в Java 8, но они не могли использовать их со стандартной библиотекой коллекций, так как обратная совместимость не может быть принесена в жертву.

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

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

It doesn’t seem to be the language feature that would be appropriate to use every day, but it seems to be essential for Java Collections API update to be able to use lambdas naturally.