Ist die folgende Schnittstelle eine gültige Funktionsschnittstelle in Java 8?
@FunctionalInterface
interface Normal{
public abstract String move();
public abstract String toString() ;
}
Warum gibt es keinen Fehler bei der Kompilierung?
java
java-8
functional-programming
Nitin T.
quelle
quelle
Antworten:
Was Alok zitiert hat, ist wahr, aber er hat etwas übersehen, was seine endgültige Antwort (dass der Code ungültig ist) falsch macht:
Die Schnittstelle verfügt über eine Methode,
String toString()
die jede Klasse bereits implementiert und von der sie erbtObject
. Das heißt, die deklarierte Schnittstellenmethode hat bereits eine Implementierung, ähnlich einer Standardmethode. Daher gibt es keinen Kompilierungsfehler undNormal
kann als funktionale Schnittstelle verwendet werden, wie in meinem MCVE gezeigt :Übrigens müssen Schnittstellenmethoden nicht deklariert werden,
public
da dies immer der Fall ist. Gleiches gilt fürabstract
.Wenn Sie die Treiberanwendung ausführen, wird dieses Konsolenprotokoll angezeigt:
Wenn Sie nun den Methodennamen
toString
in etwas anderes ändern , z. B.toStringX
werden Sie feststellen, dass@FunctionalInterface
beim Kompilieren der Klasse die erwartete Fehlermeldung angezeigt wird:quelle
Zuallererst müssen Sie eine gründliche Recherche zu diesem Thema durchführen, und dann sollten Sie auf diese Plattform kommen, um nach Ihrem Problem zu fragen.
Lassen Sie mich dennoch zunächst Ihre Zweifel an der funktionalen Schnittstelle in Java 8 klären
Nur gemäß Ihrem Code konnte ich zwei abstrakte Methoden sehen, daher ist Ihr Code ungültig .
Ich hoffe das hilft dir irgendwie. Weitere Informationen finden Sie unter folgendem Link: Java 8 Functional Interface
quelle