Замыкания в Java 7

Я слышал, что замыкания могут быть введены в следующем стандарте 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

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

Esko Luontola 05.05.2009 03:52

Более важно продвижение JVM как платформы для других языков. Реифицированные дженерики были бы благословением.

Esko Luontola 05.05.2009 03:53

@Esko: вы переходите на свои новые языки - я бы хотел сохранить огромные инвестиции, которые я уже вложил в свой. :-)

Chris K 11.05.2010 03:33

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

Brian DiCasa 21.10.2011 19:10
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
29
4
22 407
9
Перейти к ответу Данный вопрос помечен как решенный

Ответы 9

Ответ принят как подходящий

Взгляните на http://www.javac.info/.

Вроде бы вот как это будет выглядеть:

boolean even = { int x => x % 2 == 0 }.invoke(15);

где бит { int x => x % 2 == 0 } - это замыкание.

Поправьте меня, если я ошибаюсь, но для закрытия нужен открытый терм (чтение свободной переменной) как таковой :) (?)

Schildmeijer 20.11.2009 00:05

@Schildmeijer: ну, вы можете рассматривать пример как замыкание, содержащее нулевое лексическое окружение.

Derrick Turk 19.05.2010 20:46

В настоящее время кажется, что "=>", скорее всего, будет "->".

Neal Gafter 07.07.2010 22:00

@Schildmeijer: для меня это тоже совсем не похоже на закрытие, можно сказать, что это скорее лямбда-выражение.

Piotr Owsiak 10.11.2010 17:23

Жизнь в 2011 году заставляет меня думать, что в Java 7 не будет замыканий ... Если так, то в Java 7 нет необходимости.

Zippo 07.01.2011 20:20

Это действительно зависит от того, что будет введено, и действительно, будь то будет введено вообще. Есть ряд предложений закрытия различных размеров.

См. Страница 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) проекта.

Brian Yarger 05.05.2009 03:29

Project Coin не имеет отношения к закрытию. Нельзя называть закрытие небольшим изменением, верно?

Jorn 11.01.2010 21:04

У замыканий есть несколько серьезных крайних случаев. Я бы сказал, что замыкания - это гораздо более значительное изменение, чем дженерики, и у последних все еще есть несколько сложных случаев. например Библиотеки коллекций Java не могут быть написаны / скомпилированы без предупреждений.

Я бы сказал, что это больше проблема с реализацией дженериков в Java, чем с самой концепцией дженериков.

bcat 20.11.2009 00:03

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

Peter Lawrey 21.11.2009 01:41

К сожалению, вы не найдете закрытия в Java 7. Если вы ищете более легкое решение для закрытия в Java, просто посмотрите проект lambdaj:

http://code.google.com/p/lambdaj/

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

Neal Gafter 07.07.2010 18:56

Привет, Нил. Если вы читаете дату моего ответа, он был опубликован в сентябре 2009 года. Это означает, что прошло 2 месяца до объявления о закрытии Java 7 на Devoxx. Если вы помните, в то время практически все были уверены, что у нас не будет замыкания на Java 7. Вы согласны? Что делать после объявления? Поищите в Интернете все сообщения, в которых я говорил о закрытии в Java 7, чтобы исправить их?

Mario Fusco 07.07.2010 20:53

Хорошая точка зрения; виноват. Таким образом, этот ответ не является неправильным в отношении статуса Java 7, просто устарел. Что касается lambdaj, предположительно очень полезной библиотеки, она предоставляет что-то вроде лямбда-выражений, но не закрывает.

Neal Gafter 07.07.2010 21:58

замыкания будут раздражающе многословными, если не будет никакого вывода типа ... :(

Другие вопросы по теме