Как закрытие в 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 для методов, которые получают замыкания. Многие будущие потребности в дополнительных формах заявлений могут быть заменены добавлением библиотечных методов.