Functional Interface

Functional Interface είναι ένα Interface που περιέχει μία μόνο abstract μέθοδο. Μπορεί όμως να περιέχει default και static μεθόδους. Ανφέρεται επίσης ως Single Abstract Method Interfaces (SAM).

Οι functional διεπαφές χρησιμοποιούνται στις εκφράσεις lambda.

Στο παρακάτω παράδειγμα φαίνεται μια functional διεπαφή η οποία υλοποιείται με μια ανώνυμη κλάση όπως κάθε άλλη διεπαφή.

public class Main {

	public static void main(String[] args) {
		
		Shape rec = new Shape() {
			public void draw() {
				System.out.println("draw rectangle");
			}
		};
		rec.draw();
	}
}

@FunctionalInterface
interface Shape {
	void draw();
}

Εκφράσεις lambda

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

Παράδειγμα με εκφράσεις lambda.

public class Main {

	public static void main(String[] args) {
		
		Shape rec = new Shape() {
			public void draw() {
				System.out.println("draw rectangle");
			}
		};
		rec.draw();
		
		Shape tri = () -> System.out.println("draw triangle");
		tri.draw();
	}
}

@FunctionalInterface
interface Shape {
	void draw();
}

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

Σε μια έκφραση lambda μπορεί να έχουμε return.

Shape ell = (double a, double b) -> {
	double c = a + b;
	return(c);
}
System.out.println(ell.draw(100, 200));