Nowy operator ::
W Javie 8 obok operatora ->
wprowadzono operator ::
pozwalający na skrótowe odnoszenie się do metod i konstruktorów. Operator oddziela
nazwę klasy albo obiektu od nazwy metody.
Referencje do metod
Referencje do metod instancji
Używamy konstrukcji obiekt::metoda
.
Referencje do metod klasy
Używamy konstrukcji Klasa::metoda
.
Referencje do metod statycznych
Używamy konstrukcji Klasa::metoda
.
Referencje do metod nadklasy przy przeciążeniu metod
Używamy konstrukcji super::metoda
.
Referencje do konstruktorów
Referencje do konstruktora zwykłego
Używamy konstrukcji Klasa::new
.
Referencje do konstruktora z typem ogólnym
Używamy konstrukcji Klasa<Typ>::new
.
Referencje do konstruktora tablicy
Używamy konstrukcji Klasa[]::new
.
Przykład
Załóżmy, że chcemy przekszałcić strumień stringów, tak aby elementy były zapisane wielkimi literami. Dla każdego elementu musimy zastosować metodę klasy String toUpperCase()
. Funkcję mapującą możemy zapisać w następujący sposób:
map((String s) -> {return s.toUpperCase();})
albo krócej
map(s -> s.toUpperCase())
albo używając referencji do metody, która jest skrótowym zapisaniem wyrażenia lambda:
map(String::toUpperCase)
gdzie znak :: oznacza referencję do metody.
Referencja do metody pozwala również na użycie metod statycznych.
String[] values = {"Halina", "Bogusław", "Maria", "Piotr", "Anatol", "Jacek", "Alfred", "Elżbieta", "Antoni", "Bartłomiej", "Dominika", "Łucja", "Cyryl", "Metody", "Prokop", "Mikołaj", "Amelia", "Filip", "Olga"}; //stara metoda for(int i = 0; i <values.length; i++){ values[i] = values[i].toUpperCase(); System.out.print(values[i] + " "); } System.out.println(); //nowa metoda //1 Arrays.stream(values).map((String s) -> { return s.toUpperCase(); }).forEach(value -> System.out.print(value + " ")); System.out.println(); //2 Arrays.stream(values).map(s -> s.toUpperCase()) .forEach(value -> System.out.print(value + " ")); System.out.println(); //3 Arrays.stream(values).map(String::toUpperCase) .forEach(value -> System.out.print(value + " "));
Po uruchomieniu klasy na konsoli zobaczymy w każdym przypadku:
HALINA BOGUSŁAW MARIA PIOTR ANATOL JACEK ALFRED ELŻBIETA ANTONI BARTŁOMIEJ DOMINIKA ŁUCJA CYRYL METODY PROKOP MIKOŁAJ AMELIA FILIP OLGA