niedziela, 7 lutego 2010

Co nowego w Java 7 ? Część trzecia - będą domknięcia !

Wiadomość może nie jest najświeższa, niestety nie miałem ostatnio czasu aby czytać o rozwoju JDK 7, ale 10 grudnia ubiegłego roku ogłoszono akceptację projektu Lambda, czyli wprowadzanie domknięć w Javie! Udało się przepchnąć je do JDK 7 z powodu przesunięcia wydania finalnej wersji na wrzesień 2010, poza tym i tak pojawiłyby się w wersji 8.
Co nam dadzą domknięcia ? Dużo uproszczeń, kilka przykładów:

Typy funkcyjne:
#int(int, int) mnoz = #(int x, int y)(x*y);
int a = mnoz(10,20);
Funkcje też można zwracać:
#int(int, int) mnoz = #(){ return #(int a, int b)(a*b)};
int a = mnoz(10,20);
Definicja komparatora:
List<Person> list = ...
Collections.sort(list, #(Person a, Person b)( a.getAge() - b.getAge() ));
I najważniejsza funkcjonalność - extension methods:
// Załóżmy, że mamy metodę w klasie Collections:
class Collections {
  ...
  static <T> Set<T> filter(Set<T> s, #boolean(T) pred) { ... }
  ...
}
// interfejs dla zbioru:
interface Set<T> extends Collection<T> {
  ...
  Set<T> filter(#boolean(T)) import static Collections.filter;
  ...
}
// dzięki temu będziemy mogli wykonać filtrowanie w taki sposób:
Set<Integer> newSet = set.filter(#(int x)(x > 0));
// nowy zbiór będzie zawierać tylko wartości większe od zera
Polecam zapoznać się ze stroną Project Lambda: Straw-Man Proposal w poszukiwaniu większej liczby przykładów oraz stroną Closures for Java (v0.6a) gdzie opisano całą propozycję rozszerzenia.
Można też przeczytać: Closures for Java: The Q&A.

Brak komentarzy:

Prześlij komentarz