Me gustaría aclarar mi comprensión de @FunctionalInterface
un poco. Por lo que yo sé, podemos añadir una anotación @FunctionalInterface en una interfaz que sólo tiene un método abstracto (Puede tener por defecto múltiple y métodos estáticos sin embargo.
En Java 8, Comparator<T>
la interfaz ha sido marcado con @FunctionalInterface para que pueda ser utilizado en la expresión Lambda pero cuando abrí la definición, pude ver 2 clase abstracta que hay
int compare(T o1, T o2);
y boolean equals(Object obj);
Me gustaría entender cómo es posible tener más de 2 métodos abstractos en la interfaz funcional y todavía no conseguir algún error? ayudarme a aclarar mis entendimientos en esto.
Su pregunta se responde en los documentos de Java de la @FunctionalInterface
anotación:
Si una interfaz declara un método abstracto anulando uno de los métodos públicos de java.lang.Object, que además no cuenta para el recuento abstracta método de la interfaz desde cualquier implementación de la interfaz tendrá una implementación de java.lang.Object o en otro lugar.
Así presencia de la presencia de boolean equals(Object obj);
la interfaz Comparador no se suma a la cuenta de los métodos abstractos presentes en la interfaz y así podemos aplicar @FunctionalInterface
a esta interfaz.