Sobes.tech
Junior

Opowiedz o wyrażeniach lambda i metodach odniesienia w kontekście programowania w Java oraz ich zastosowaniu w rozwoju Android.

sobes.tech AI

Odpowiedź od AI

Wyrażenia lambda to zwięzła notacja do tworzenia funkcji anonimowych. Pozwalają na przekazywanie funkcjonalności jako argumentu metody lub tworzenie funkcji bez podawania jej nazwy. Składnia: (parametry) -> { ciało }. Używane do implementacji interfejsów z jedną metodą abstrakcyjną (interfejsy funkcyjne).

Zastosowanie w Android:

  • Obsługa zdarzeń (kliknięcia, zdarzenia dotykowe).
  • Implementacja interfejsów słuchaczy (np. OnClickListener, OnCompleteListener).
  • Praca z API Stream do przetwarzania kolekcji (filtracja, transformacja).
// Przed Java 8
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Toast.makeText(context, "Kliknięto!", Toast.LENGTH_SHORT).show();
    }
});

// Z użyciem wyrażenia lambda
button.setOnClickListener(v -> {
    Toast.makeText(context, "Kliknięto!", Toast.LENGTH_SHORT).show();
});

Metody referencyjne to bardziej zwięzły sposób odwoływania się do istniejących metod lub konstruktorów bez ich wywoływania. Służą do zastępowania wyrażeń lambda, które po prostu wywołują jedną metodę.

Typy metod referencyjnych:

  • Odwołanie do metody statycznej: Klasa::nazwaMetodyStatycznej
  • Odwołanie do metody instancji obiektu: obiekt::nazwaMetody
  • Odwołanie do metody instancji dowolnego obiektu typu: Typ::nazwaMetody
  • Odwołanie do konstruktora: Klasa::new

Zastosowanie w Android:

  • Skracanie wyrażeń lambda przy pracy z słuchaczami.
  • W API Stream do stosowania metod do elementów strumienia.
// Lambda
List<String> imiona = Arrays.asList("Alice", "Bob");
imiona.forEach(imie -> System.out.println(imie));

// Odwołanie do metody
imiona.forEach(System.out::println);

Zalety:

  • Lepsza czytelność kodu, szczególnie w przypadku prostych operacji.
  • Bardziej zwarty kod.
  • Użycie w API Stream sprawia, że przetwarzanie kolekcji jest bardziej funkcyjne i wydajne.