Я слышал, что замыкания могут быть введены в следующем стандарте Java, который планируется выпустить примерно на следующее лето.
Как бы выглядел этот синтаксис?
Я где-то читал, что введение замыканий в java - это более серьезное изменение, чем универсальное в java 5. Это правда? за и против?
(К настоящему времени мы точно знаем, что закрытие не будет включено в следующий выпуск Java)
ИЛИ ЖЕ
редактировать: http://puredanger.com/tech/2009/11/18/closures-after-all/: D
edit2: Переосмысление JDK7: http://blogs.oracle.com/mr/entry/rethinking_jdk7
edit3: нельзя терять ни минуты !: http://blogs.oracle.com/mr/entry/quartet
Более важно продвижение JVM как платформы для других языков. Реифицированные дженерики были бы благословением.
@Esko: вы переходите на свои новые языки - я бы хотел сохранить огромные инвестиции, которые я уже вложил в свой. :-)
Scala прекрасно взаимодействует с Java. Таким образом, вы можете сохранить свои вложения и повысить производительность с помощью лучшего языка.




Взгляните на http://www.javac.info/.
Вроде бы вот как это будет выглядеть:
boolean even = { int x => x % 2 == 0 }.invoke(15);
где бит { int x => x % 2 == 0 } - это замыкание.
Поправьте меня, если я ошибаюсь, но для закрытия нужен открытый терм (чтение свободной переменной) как таковой :) (?)
@Schildmeijer: ну, вы можете рассматривать пример как замыкание, содержащее нулевое лексическое окружение.
В настоящее время кажется, что "=>", скорее всего, будет "->".
@Schildmeijer: для меня это тоже совсем не похоже на закрытие, можно сказать, что это скорее лямбда-выражение.
Жизнь в 2011 году заставляет меня думать, что в Java 7 не будет замыканий ... Если так, то в Java 7 нет необходимости.
Это действительно зависит от того, что будет введено, и действительно, будь то будет введено вообще. Есть ряд предложений закрытия различных размеров.
См. Страница Java 7 Алекса Миллера для предложений и различных сообщений в блогах.
Лично мне бы хотелось увидеть закрытие - они красивый и невероятно полезный - но я боюсь, что некоторые из предложений довольно непростые.
Это особенности java 7 http://tech.puredanger.com/java7/#switch, примеры очень полезны.
Обратите внимание, что "тип функции" на самом деле относится к типу предложения:
{int => boolean} evaluateInt; //declare variable of "function" type
evaluateInt = {int x => x % 2 }; //assignment
Я думаю, что все еще ведется много споров относительно того, какой синтаксис в конечном итоге будет использоваться. На самом деле я был бы очень удивлен, если бы из-за всего этого он все же попадал в Java 7.
В ноябре 2009 года произошел неожиданный поворот в этой проблеме и закрытия теперь будут добавлены на Java 7.
Замыкания (также известные как лямбда-выражения) в Java 7 не происходили. Они были добавлены наконец в первом выпуске Java 8 в 2014 году.
Это то, что я тоже слышал. Отсюда небольшие изменения языка (он же Project Coin - openjdk.java.net/projects/coin) проекта.
Project Coin не имеет отношения к закрытию. Нельзя называть закрытие небольшим изменением, верно?
У замыканий есть несколько серьезных крайних случаев. Я бы сказал, что замыкания - это гораздо более значительное изменение, чем дженерики, и у последних все еще есть несколько сложных случаев. например Библиотеки коллекций Java не могут быть написаны / скомпилированы без предупреждений.
Я бы сказал, что это больше проблема с реализацией дженериков в Java, чем с самой концепцией дженериков.
Я согласен. Теперь кажется, что упрощенная форма замыканий будет в очень отложенной версии Java 7.
К сожалению, вы не найдете закрытия в Java 7. Если вы ищете более легкое решение для закрытия в Java, просто посмотрите проект lambdaj:
http://code.google.com/p/lambdaj/
Спасибо за дезинформацию, Марио. Во-первых, лямбда-выражения в настоящее время запланированы для Java 7. Во-вторых, лямбда-выражения не обеспечивают замыканий, поскольку не могут захватывать переменные из лексически охватывающей области.
Привет, Нил. Если вы читаете дату моего ответа, он был опубликован в сентябре 2009 года. Это означает, что прошло 2 месяца до объявления о закрытии Java 7 на Devoxx. Если вы помните, в то время практически все были уверены, что у нас не будет замыкания на Java 7. Вы согласны? Что делать после объявления? Поищите в Интернете все сообщения, в которых я говорил о закрытии в Java 7, чтобы исправить их?
Хорошая точка зрения; виноват. Таким образом, этот ответ не является неправильным в отношении статуса Java 7, просто устарел. Что касается lambdaj, предположительно очень полезной библиотеки, она предоставляет что-то вроде лямбда-выражений, но не закрывает.
замыкания будут раздражающе многословными, если не будет никакого вывода типа ... :(
Прямо сейчас меня больше интересует Scala, чем какие-либо новые языковые функции Java, которые могут появиться в ближайшем будущем - Scala et al. они уже есть, и они лучше связаны с языком, чем Java. Думаю, пора переходить к новым языкам с меньшим количеством исторического багажа.