Как закрытие в Java позволит API-дизайну заменить язык?

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

Однако один из ключевых моментов, упомянутых в проекте предложения (http://www.javac.info/consensus-closures-jsr.html), приведен в разделе 2.5, пункт e:

(Спецификация улучшит язык)

e), позволяя будущему API-дизайну заменить язык для расширения платформы Java.

Я изо всех сил пытаюсь понять, как это происходит, конечно, дизайн языка - это просто дизайн самого языка и не может быть заменен API, если Java не откроет всевозможные странные API, используя закрытие для изменяя язык (что я очень сомневаюсь, произойдет.)

Может ли кто-нибудь пролить свет на это и, возможно, привести пример того, что раньше требовало языкового изменения, но с добавлением закрытий больше не требуется?

Ответы

Ответ 1

Дизайн API и языковые функции в некоторых случаях определенно взаимозаменяемы. Просто посмотрите на что-то вроде синхронизированного ключевого слова на Java. Это ключевое слово, но оно может быть реализовано как API, если язык был достаточно нелогичным. Аннотации - еще один пример. Другой путь вокруг аннотации @Stateless, которая делает все методы в транзакции класса, также может быть ключевым словом языка.

Закрытие, в частности, облегчает передачу "блока кода" методу, который затем может что-то сделать с этим.

Грубый пример: а для каждого можно было сделать:

for_each(myFooList, #(Foo foo) { 
   String something = foo.getBar() + foo.getKaz();
   System.out.println(something);
});

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

Ответ 2

Для тех, кто не прочитал проект предложения, ниже более подробно из этого документа:

Добавление закрытий упрощает эволюцию платформы Java. Многие существующие языковые RFE в базе данных Sun public bug могут перенацеливаться как запросы API для методов, которые получают замыкания. Многие будущие потребности в дополнительных формах заявлений могут быть заменены добавлением библиотечных методов.