A interface abaixo é uma interface funcional válida no Java 8?
@FunctionalInterface
interface Normal{
public abstract String move();
public abstract String toString() ;
}
Por que isso não me dá um erro de tempo de compilação?
java
java-8
functional-programming
Nitina T
fonte
fonte
Respostas:
O que Alok citou é verdade, mas ele ignorou algo, o que torna sua resposta final (que o código é inválido) errada:
A interface possui um método
String toString()
que toda classe já implementa, herdando-aObject
. Ou seja, o método da interface declarada já possui uma implementação, semelhante a um método padrão. Portanto, não há erro de compilação eNormal
pode ser usado como uma interface funcional, como mostrado no meu MCVE :BTW, não há necessidade de declarar métodos de interface como
public
sempre. O mesmo vale paraabstract
.Se você executar o aplicativo de driver, verá este log do console:
Agora, se você alterar o nome do método
toString
para outra coisa, por exemplotoStringX
, verá que devido à@FunctionalInterface
mensagem de erro esperada ao compilar a classe:fonte
Primeiro de tudo, Nitin, você precisa ter uma pesquisa adequada sobre isso e, em seguida, você deve entrar nesta plataforma para perguntar sobre o seu problema.
No entanto, antes de tudo, deixe-me esclarecer sua dúvida sobre a Interface Funcional em Java 8
Conforme apenas o seu código, eu pude ver dois métodos abstratos; portanto , seu código é inválido .
Espero que ajude você de alguma forma. Para obter mais informações, consulte este link: Java 8 Functional Interface
fonte