Что такое закрытие? Предполагается, что он будет включен в Java 7. (Замыкания обсуждались для включения в Java 7, но в конце концов не были включены. -Ed) Кто-нибудь, пожалуйста, предоставьте мне несколько надежных ссылок, из которых я могу узнать материал о замыканиях?
105
Замыкание - это блок кода, на который можно ссылаться (и передавать) с доступом к переменным охватывающей области.
Начиная с Java 1.1, анонимный внутренний класс предоставил эту возможность в очень подробной форме. У них также есть ограничение на использование
final
(и определенно назначенных) локальных переменных. (Обратите внимание, что даже нелокальныеfinal
переменные входят в область видимости, но не могут использоваться.)Предполагается, что Java SE 8 будет иметь более сжатую версию этого для интерфейсов с одним методом *, называемую «лямбда-выражения». Лямбды имеют те же ограничения, что и анонимные внутренние классы, хотя некоторые детали меняются случайным образом.
Лямбда-выражения разрабатываются в рамках Project Lambda и JSR 335 .
* Первоначально дизайн был более гибким, позволяя использовать одиночные абстрактные методы (SAM). К сожалению, новый дизайн менее гибкий, но все же пытается оправдать возможность реализации в интерфейсах.
источник
По словам Тома Хотина
Теперь я пытаюсь имитировать пример закрытия JavaScript в Википедии с « прямым » переводом на Java, в надежде быть полезным:
Теперь часть java: Function1 - это интерфейс «Functor» с арностью 1 (один аргумент). Замыкание - это класс, реализующий Function1, конкретный Functor, который действует как функция (int -> int). В методе main () я просто создаю экземпляр foo как объект Closure, реплицируя вызовы из примера JavaScript. Класс IntBox - это простой контейнер, он ведет себя как массив из 1 int:
Он печатает:
источник
Пожалуйста, посмотрите эту вики-страницу для определения закрытия.
И эта страница для закрытия в Java 8: http://mail.openjdk.java.net/pipermail/lambda-dev/2011-September/003936.html
Также посмотрите этот Q&A: Closures in Java 7
источник
Java Closures будет частью J2SE 8 и будет выпущен к концу 2012 года.
Поддержка замыканий в Java 8 включает концепцию лямбда-выражений, справочника по методам, справочника по конструктору и методов по умолчанию.
Для получения дополнительной информации и рабочих примеров для этого посетите: http://amitrp.blogspot.in/2012/08/at-first-sight-with-closures-in-java.html
источник
Да, Closure (Lambda Expressions) - это новая функция в предстоящем выпуске Java SE 8. Вы можете получить дополнительную информацию об этом по следующей ссылке: http://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html
источник
Реализация закрытия для Java 5, 6 и 7
http://mseifed.blogspot.se/2012/09/bringing-closures-to-java-5-6-and-7.html
В нем есть все, что можно пожелать ...
источник