package Lambda;

public interface Lambda {
	// Lambda-Ausdruck: Kurzform für anonyme Klassenimplementierung
	// - Wird verwendet, um Methoden schnell zu überschreiben
	// - Syntax: (Parameter) -> { Methodenkörper; }
	
	// - wenn die methode nur einen Parameter hat, können die Klammern weglassen werden
	
	// Funktionale Schnittstelle: Eine Schnittstelle, die genau eine abstrakte Methode enthält
	// - Lambdas können nur mit funktionalen Schnittstellen verwendet werden
	// - Beispiel: Runnable (enthält nur die Methode run())
	
	// Beispiel für eine funktionale Schnittstelle mit Lambda:
	Runnable task = () -> System.out.println("Task läuft");
	
	// Typ-Inferenz: Der Compiler kann oft den Typ der Parameter und Rückgabewerte aus dem Kontext ableiten
	// - Beispiel: (int x) -> x * 2 kann auch als x -> x * 2 geschrieben werden
	
	// Mögliche Fehlerquellen:
	// - Lambda-Ausdrücke können nur mit Schnittstellen verwendet werden, die genau eine abstrakte Methode haben
	// - Typische Probleme sind Mehrdeutigkeit bei der Typ-Inferenz und Schwierigkeiten bei der Fehlersuche in komplexen Lambdas
	
	public void tueetwas(String name);
	
	//public void x(int x);
	/*
	 * in andere Klasse
	 * x -> x * 2
	 */
}
