Sobes.tech
Junior

Μίλησε για τις εκφράσεις lambda και τις μεθόδους αναφοράς στο πλαίσιο του προγραμματισμού Java και την εφαρμογή τους στην ανάπτυξη Android.

sobes.tech AI

Απάντηση από AI

Οι εκφράσεις lambda είναι μια συνοπτική σημειογραφία για τη δημιουργία ανώνυμων συναρτήσεων. Επιτρέπουν την μεταβίβαση λειτουργικότητας ως όρισμα σε μια μέθοδο ή τη δημιουργία μιας συνάρτησης χωρίς να καθορίσετε το όνομά της. Σύνταξη: (παραμέτρους) -> { σώμα }. Χρησιμοποιούνται για την υλοποίηση διασυνδέσεων με μία μόνο αφηρημένη μέθοδο (λειτουργικές διασυνδέσεις).

Εφαρμογή σε Android:

  • Χειριστές συμβάντων (κλικ, συμβάντα αφής).
  • Υλοποίηση διασυνδέσεων ακροατών (π.χ., OnClickListener, OnCompleteListener).
  • Εργασία με το API Stream για επεξεργασία συλλογών (φιλτράρισμα, μετασχηματισμός).
// Πριν από το Java 8
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Toast.makeText(context, "Κλικ!", Toast.LENGTH_SHORT).show();
    }
});

// Με έκφραση lambda
button.setOnClickListener(v -> {
    Toast.makeText(context, "Κλικ!", Toast.LENGTH_SHORT).show();
});

Οι μέθοδοι αναφοράς είναι ένας πιο συνοπτικός τρόπος αναφοράς σε υπάρχουσες μεθόδους ή κατασκευαστές χωρίς να τις εκτελεί. Χρησιμοποιούνται για την αντικατάσταση των εκφράσεων lambda που καλούν απλώς μια μέθοδο.

Τύποι μεθόδων αναφοράς:

  • Αναφορά σε στατική μέθοδο: Κλάση::όνομαΣτατικήςΜέθοδος
  • Αναφορά σε μέθοδο στιγμιότυπου αντικειμένου: αντικείμενο::όνομαΜέθοδος
  • Αναφορά σε μέθοδο στιγμιότυπου οποιουδήποτε αντικειμένου τύπου: Τύπος::όνομαΜέθοδος
  • Αναφορά σε κατασκευαστή: Κλάση::new

Εφαρμογή σε Android:

  • Συντόμευση των εκφράσεων lambda κατά την εργασία με ακροατές.
  • Στην API Stream για την εφαρμογή μεθόδων σε στοιχεία του ρεύματος.
// Lambda
List<String> ονόματα = Arrays.asList("Alice", "Bob");
ονόματα.forEach(όνομα -> System.out.println(όνομα));

// Αναφορά σε μέθοδο
ονόματα.forEach(System.out::println);

Πλεονεκτήματα:

  • Βελτιωμένη αναγνωσιμότητα κώδικα, ειδικά σε απλές λειτουργίες.
  • Πιο συμπαγής κώδικας.
  • Η χρήση στην API Stream καθιστά την επεξεργασία συλλογών πιο λειτουργική και αποδοτική.