Funktionale Interfaces wurden in Java 8 eingeführt. Sie bezeichnen Interfaces, die nur eine einzige abstrakte Methode definieren. Der folgende Code zeigt zwei Interfaces - das erste ist funktional, das zweite nicht.
public interface FunctionInterface{
void myMethod();
}
public interface NotFunctionalInterface{
void myFirstMethod();
void mySecondMethod();
}
Interfaces mit nur einer Methode hat es doch schon immer gegeben. Warum benötigen sie jetzt auf einmal einen eigenen Namen? Weil es viel mehr ist als nur ein Name. In Java 8 haben funktionale Interfaces eine wirkliche syntaktische Bedeutung im Rahmen von Lambda-Ausdrücken. Diesem Thema widme ich bei Gelegenheit noch eigene Blog-Beiträge. Jetzt erst einmal zur Annotation.
Wir können funktionale Interfaces mit @FunctionalInterface markieren. Damit sagen wir dem Compiler: "He, Compiler. Dieses Interface soll funktional sein. Pass mal bitte mit auf." Jetzt sollte jeder von uns bis eins zählen können - das traue ich jedem Leser dieses Blogs zu. Warum benötigt man dann diese Annotation?
Seine wirkliche Stärke erhält @FunctionalInterface, wenn ein Interface geändert wird. Nehmen wir mal das erste Beispiel von oben. Ich führe in das Interface FunctionalInterface noch eine zweite Methode ein, weil sich mein Programm ja weiter entwickelt. Mit einem Schlag würden alle Lambda-Ausdrücke, die dieses Interface verwenden, nicht mehr funktionieren. Wenn ich mein funktionales Interface mit @FunctionalInterface markiere und ich füge irgendwann aus Versehen eine weitere Methode ein, wird der Compiler sich darüber beschweren und mich auf diesen Fehler aufmerksam machen. Im Folgenden noch ein Beispiel mit der Annotation.
public interface FunctionInterface{
@FunctionalInterface
void myMethod();
}
Keine Kommentare:
Kommentar veröffentlichen