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 

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *