¿La siguiente interfaz es una interfaz funcional válida en Java 8?
@FunctionalInterface
interface Normal{
public abstract String move();
public abstract String toString() ;
}
¿Por qué no me da un error de tiempo de compilación?
java
java-8
functional-programming
Nitin T
fuente
fuente
Respuestas:
Lo que Alok citó es cierto, pero pasó por alto algo, lo que hace que su respuesta final (que el código no es válido) sea incorrecta:
La interfaz tiene un método
String toString()
que cada clase ya implementa, heredandoObject
. Es decir, el método de interfaz declarado ya tiene una implementación, similar a un método predeterminado. Por lo tanto, no hay un error de compilación yNormal
puede usarse como una interfaz funcional como se muestra en mi MCVE :Por cierto, no es necesario declarar los métodos de interfaz
public
porque siempre lo son. Lo mismo vale paraabstract
.Si ejecuta la aplicación del controlador, verá este registro de consola:
Ahora, si cambia el nombre del método
toString
a otro, por ejemplotoStringX
, verá que debido al@FunctionalInterface
mensaje de error esperado al compilar la clase:fuente
En primer lugar, Nitin, debe tener una investigación adecuada sobre esto, y luego debe venir a esta plataforma para preguntar sobre su problema.
Sin embargo, antes que nada, permítame aclarar su duda sobre la interfaz funcional en Java 8
Según su código solamente, pude ver dos métodos abstractos, por lo tanto , su código no es válido .
Espero que te ayude de alguna manera. Para obtener más información, consulte este enlace: Interfaz funcional Java 8
fuente