2015-03-30 1 views
2

Пока some have asked this question before, это было до того, как была выпущена Java 8.Почему Java 8 не позволяет членам интерфейса быть закрытыми?

Раньше статические элементы не допускались, поскольку детали реализации не должны определяться в интерфейсе. Именно поэтому ничто не должно быть частным, потому что разработчику интерфейса нужно будет предоставить детали реализации.

Этот вид изменен с Java 8, не так ли? Метод по умолчанию определяет детали реализации, а также статические методы. Почему же это еще не разрешено?

+0

Если кто-то надеялся e JLS скажет, почему, [это не так] (http://docs.oracle.com/javase/specs/jls/se8/html/jls-9.html#jls-9.5). Он просто говорит, что вы не можете объявлять членов 'protected' или' private'. –

ответ

7

Из-за временных ограничений в реализации.

Частные методы изначально были в спецификации, но в электронном письме под названием «Some Pullbacks», отправленном Брайаном Гетцем в список рассылки лямбда-спецификаторов, когда Java 8 находилась в разработке, их тянули.

Мы хотели бы, чтобы вытащить обратно две небольшие функции из художественного плана JSR-335:

  • частные методы в интерфейсах
  • "пакет модификатор" для пакета-частного видимость

Основная причина заключается в ресурсах ...

+2

Я был * просто набрал * комментарий «Если кто-то не может найти нить форума или что-то, что связано с JCP для добавления методов по умолчанию, которые говорят, почему ...», и вы разместили это. :-) +1 –

+1

@ T.J.Crowder Да, обычно я бы назвал это голосованием «в первую очередь основанным на мнениях», но в этом случае мы на самом деле объективный ответ! Я знал, что у меня есть причина скрываться в этом списке. ;) – yshavit

+0

Похоже, это скоро появится и похоже, что модификатор по умолчанию для видимости пакета - это выход для Java 9? Спасибо за ответ. –

Смежные вопросы