En la interfaz de colección encontré un método llamado removeIf()
que contiene su implementación.
default boolean removeIf(Predicate<? super E> filter) {
Objects.requireNonNull(filter);
boolean removed = false;
final Iterator<E> each = iterator();
while (each.hasNext()) {
if (filter.test(each.next())) {
each.remove();
removed = true;
}
}
return removed;
}
Quiero saber si hay alguna forma de definir el cuerpo del método en una interfaz.
¿Cuál es la default
palabra clave y cómo funciona?
Respuestas:
De https://dzone.com/articles/interface-default-methods-java
Hay una pregunta común que las personas hacen sobre los métodos predeterminados cuando escuchan sobre la nueva función por primera vez:
Ejemplo para ilustrar esta situación:
Este código no se puede compilar con el siguiente resultado:
Para solucionarlo, en Clazz, tenemos que resolverlo manualmente anulando el método conflictivo:
Pero, ¿qué sucede si quisiéramos llamar a la implementación predeterminada del método foo () desde la interfaz A en lugar de implementar la nuestra?
Es posible referirse a A # foo () de la siguiente manera:
fuente
Estos métodos se denominan métodos predeterminados. El método predeterminado o el método Defender es una de las características recién agregadas en Java 8.
Se utilizarán para permitir que un método de interfaz proporcione una implementación utilizada como predeterminada en el caso de que una clase concreta no proporcione una implementación para ese método.
Entonces, si tiene una interfaz, con un método predeterminado:
La siguiente clase es perfectamente válida:
Si crea una instancia de
HelloImpl
:Enlaces útiles:
fuente
Investigué un poco y encontré lo siguiente. Espero que esto ayude.
Los métodos de interfaz normales se declaran como abstractos y deben definirse en la clase que implementa la interfaz. Esto 'carga' al implementador de la clase con la responsabilidad de implementar cada método declarado. Más importante aún, esto también significa que no es posible extender una interfaz después de la 'publicación'. De lo contrario, todos los implementadores tendrían que adaptar su implementación, rompiendo la compatibilidad binaria y de fuentes hacia atrás.
Para hacer frente a estos problemas, una de las nuevas características de JDK 8 es la posibilidad de ampliar las interfaces existentes con métodos predeterminados. Los métodos predeterminados no solo se declaran, sino que también se definen en la interfaz.
fuente