Co to jest zamknięcie? Powinien być zawarty w Javie 7. (Zamknięcia zostały omówione do włączenia do Javy 7, ale ostatecznie nie zostały uwzględnione. -Ed) Czy ktoś może mi podać jakieś wiarygodne referencje, z których mogę dowiedzieć się czegoś o domknięciach?
105
Zamknięcie to blok kodu, do którego można się odwoływać (i przekazywać go) z dostępem do zmiennych z otaczającego zakresu.
Od wersji Java 1.1 anonimowe klasy wewnętrzne udostępniały tę funkcję w bardzo rozwlekły sposób. Mają również ograniczenie możliwości używania
final
(i definitywnie przypisanych) zmiennych lokalnych. (Uwaga, nawetfinal
zmienne inne niż lokalne znajdują się w zakresie, ale nie można ich używać).Java SE 8 ma mieć bardziej zwięzłą wersję tego dla interfejsów jednometodowych *, zwanych „lambdami”. Lambdy mają takie same ograniczenia jak anonimowe klasy wewnętrzne, chociaż niektóre szczegóły różnią się losowo.
Lambdy są opracowywane w ramach Projektu Lambda i JSR 335 .
* Pierwotnie projekt był bardziej elastyczny, pozwalając na typy pojedynczych metod abstrakcyjnych (SAM). Niestety nowy projekt jest mniej elastyczny, ale próbuje usprawiedliwić dopuszczenie do implementacji w ramach interfejsów.
źródło
Według Toma Hawtina
Teraz próbuję emulować przykład zamknięcia JavaScript w Wikipedii , z „ prostym ” tłumaczeniem na Javę, w nadziei, że będzie to przydatne:
Teraz część java: Function1 to interfejs "Functor" z wartością 1 (jeden argument). Closure to klasa implementująca Function1, konkretny Funktor, który działa jako funkcja (int -> int). W metodzie main () po prostu tworzę instancję foo jako obiekt Closure, replikując wywołania z przykładu JavaScript. Klasa IntBox jest po prostu prostym kontenerem, zachowuje się jak tablica 1 int:
Drukuje:
źródło
Proszę zobaczyć tę stronę wiki, aby zapoznać się z definicją zamknięcia.
A ta strona do zamknięcia w Javie 8: http://mail.openjdk.java.net/pipermail/lambda-dev/2011-September/003936.html
Spójrz także na to pytanie i odpowiedzi: Zamknięcia w Javie 7
źródło
Java Closures będzie częścią J2SE 8 i ma zostać wydane do końca 2012 roku.
Obsługa zamknięć Java 8 obejmuje koncepcję wyrażeń lambda, odwołania do metod, odniesienia do konstruktora i metod domyślnych.
Więcej informacji i przykłady robocze można znaleźć na stronie : http://amitrp.blogspot.in/2012/08/at-first-sight-with-closures-in-java.html
źródło
Tak, Closure (Lambda Expressions) to nowa funkcja w nadchodzącej wersji Java SE 8. Możesz uzyskać więcej informacji na ten temat, klikając poniższy link: http://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html
źródło
Implementacja zamknięcia dla Java 5, 6 i 7
http://mseifed.blogspot.se/2012/09/bringing-closures-to-java-5-6-and-7.html
Zawiera wszystko, o co można prosić ...
źródło