Junior
Vorbește despre expresiile lambda și metodele de referință în contextul programării Java și aplicarea lor în dezvoltarea Android.
sobes.tech AI
Răspuns de la AI
Expresiile lambda sunt o notație concisă pentru crearea funcțiilor anonime. Permite transmiterea funcționalității ca argument al unei metode sau crearea unei funcții fără a-i specifica numele. Sintaxă: (parametri) -> { corp }. Sunt utilizate pentru implementarea interfețelor cu o singură metodă abstractă (interfețe funcționale).
Aplicare în Android:
- Handleri de evenimente (clicuri, evenimente tactile).
- Implementarea interfețelor de ascultători (de exemplu,
OnClickListener,OnCompleteListener). - Lucru cu API-ul Stream pentru procesarea colecțiilor (filtrare, transformare).
// Înainte de Java 8
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context, "Apăsat!", Toast.LENGTH_SHORT).show();
}
});
// Cu expresie lambda
button.setOnClickListener(v -> {
Toast.makeText(context, "Apăsat!", Toast.LENGTH_SHORT).show();
});
Metodele de referință sunt o modalitate mai compactă de a face referire la metode sau constructori existenți fără a-i executa. Sunt folosite pentru a înlocui expresiile lambda care doar apelează o metodă.
Tipuri de metode de referință:
- Referință la metodă statică:
Clasă::numeMetodăStatica - Referință la metodă de instanță a unui obiect:
obiect::numeMetodă - Referință la metodă de instanță a unui tip arbitrar:
Tip::numeMetodă - Referință la constructor:
Clasă::new
Aplicare în Android:
- Reducerea expresiilor lambda când se lucrează cu ascultători.
- În API-ul Stream pentru aplicarea metodelor asupra elementelor stream-ului.
// Lambda
List<String> nume = Arrays.asList("Alice", "Bob");
nume.forEach(n -> System.out.println(n));
// Referință la metodă
nume.forEach(System.out::println);
Avantaje:
- Îmbunătățirea lizibilității codului, mai ales în cazul operațiilor simple.
- Cod mai compact.
- Utilizarea în API-ul Stream face procesarea colecțiilor mai funcțională și eficientă.