Sobes.tech
Junior

Pověz o lambda výrazech a metodách odkazů v kontextu programování v jazyce Java a jejich použití v Android vývoji.

sobes.tech AI

Odpověď od AI

Lambda výrazy jsou stručná notace pro vytváření anonymních funkcí. Umožňují předávat funkčnost jako argument metody nebo vytvářet funkci bez určení jejího jména. Syntaxe: (parametry) -> { tělo }. Používají se k implementaci rozhraní s jednou abstraktní metodou (funkcionální rozhraní).

Použití v Androidu:

  • Obsluhovače událostí (kliknutí, dotykové události).
  • Implementace posluchačských rozhraní (například OnClickListener, OnCompleteListener).
  • Práce s API Stream pro zpracování kolekcí (filtrace, transformace).
// Před Java 8
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Toast.makeText(context, "Kliknuto!", Toast.LENGTH_SHORT).show();
    }
});

// S použitím lambda výrazu
button.setOnClickListener(v -> {
    Toast.makeText(context, "Kliknuto!", Toast.LENGTH_SHORT).show();
});

Metody odkazů jsou stručnější způsoby odkazování na existující metody nebo konstruktory, aniž by je bylo třeba spouštět. Používají se k nahrazení lambda výrazů, které pouze volají jednu metodu.

Typy metod odkazů:

  • Odkaz na statickou metodu: Třída::názevStatickéMetody
  • Odkaz na metodu instance objektu: objekt::názevMetody
  • Odkaz na metodu instance libovolného objektu daného typu: Typ::názevMetody
  • Odkaz na konstruktor: Třída::new

Použití v Androidu:

  • Zkrácení lambda výrazů při práci s posluchači.
  • V API Stream pro použití metod na prvcích streamu.
// Lambda
List<String> jmena = Arrays.asList("Alice", "Bob");
jmena.forEach(jmeno -> System.out.println(jmeno));

// Odkaz na metodu
jmena.forEach(System.out::println);

Výhody:

  • Zlepšení čitelnosti kódu, zejména u jednoduchých operací.
  • Kompaktnější kód.
  • Použití v API Stream činí zpracování kolekcí více funkcionální a efektivnější.