Sobes.tech
Junior

Povedajte o lambda výrazoch a metódach odkazov v kontexte programovania v Jave a ich použití v Android vývoji.

sobes.tech AI

Odpoveď od AI

Lambda výrazy sú stručná notácia na vytváranie anonymných funkcií. Umožňujú odovzdávať funkčnosť ako argument metóde alebo vytvárať funkciu bez určenia jej mena. Syntax: (parametre) -> { telo }. Používajú sa na implementáciu rozhraní s jednou abstraktnou metódou (funkcionálne rozhrania).

Použitie v Android:

  • Obsluhovače udalostí (kliknutia, udalosti dotyku).
  • Implementácia rozhraní poslucháčov (napríklad OnClickListener, OnCompleteListener).
  • Práca s API Stream na spracovanie kolekcií (filterovanie, transformácia).
// Pred Java 8
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Toast.makeText(context, "Kliknuté!", Toast.LENGTH_SHORT).show();
    }
});

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

Metódy odkazov sú stručnejším spôsobom odkazovania na existujúce metódy alebo konštruktory, bez ich spustenia. Používajú sa na nahradenie lambda výrazov, ktoré iba volajú jednu metódu.

Typy metód odkazov:

  • Odkaz na statickú metódu: Trieda::názovStatickejMetódy
  • Odkaz na metódu inštancie objektu: objekt::názovMetódy
  • Odkaz na metódu inštancie ľubovoľného objektu daného typu: Typ::názovMetódy
  • Odkaz na konštruktor: Trieda::new

Použitie v Android:

  • Skrátenie lambda výrazov pri práci s poslucháčmi.
  • V API Stream na aplikovanie metód na prvky streamu.
// Lambda
List<String> mená = Arrays.asList("Alice", "Bob");
mená.forEach(meno -> System.out.println(meno));

// Odkaz na metódu
mená.forEach(System.out::println);

Výhody:

  • Zlepšuje čitateľnosť kódu, najmä pri jednoduchých operáciách.
  • Kompaktnejší kód.
  • Použitie v API Stream robí spracovanie kolekcií funkcionálnejším a efektívnejším.