Dans l'interface de collection, j'ai trouvé une méthode nommée removeIf()
qui contient son implémentation.
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;
}
Je veux savoir s'il existe un moyen de définir le corps de la méthode dans une interface?
Quel est le default
mot - clé et comment ça marche?
Réponses:
De https://dzone.com/articles/interface-default-methods-java
Il y a une question courante que les gens posent sur les méthodes par défaut lorsqu'ils entendent parler de la nouvelle fonctionnalité pour la première fois:
Exemple pour illustrer cette situation:
Ce code ne parvient pas à se compiler avec le résultat suivant:
Pour résoudre ce problème, dans Clazz, nous devons le résoudre manuellement en remplaçant la méthode en conflit:
Mais que se passe-t-il si nous voulons appeler l'implémentation par défaut de la méthode foo () depuis l'interface A au lieu d'implémenter la nôtre.
Il est possible de faire référence à A # foo () comme suit:
la source
Ces méthodes sont appelées méthodes par défaut. La méthode par défaut ou la méthode Defender est l'une des nouvelles fonctionnalités ajoutées à Java 8.
Ils seront utilisés pour permettre à une méthode d'interface de fournir une implémentation utilisée par défaut dans le cas où une classe concrète ne fournit pas d'implémentation pour cette méthode.
Donc, si vous avez une interface, avec une méthode par défaut:
La classe suivante est parfaitement valable:
Si vous créez une instance de
HelloImpl
:Liens utiles:
la source
J'ai fait un peu de recherche et j'ai trouvé ce qui suit. J'espère que cela t'aides.
Les méthodes d'interface normales sont déclarées comme abstraites et doivent être définies dans la classe qui implémente l'interface. Ceci «charge» l'implémenteur de classe avec la responsabilité d'implémenter chaque méthode déclarée. Plus important encore, cela signifie également que l'extension d'une interface n'est pas possible après la «publication». Sinon, tous les implémenteurs devraient adapter leur implémentation, rompant la compatibilité ascendante des sources et des binaires.
Pour faire face à ces problèmes, l'une des nouvelles fonctionnalités de JDK 8 est la possibilité d'étendre les interfaces existantes avec des méthodes par défaut. Les méthodes par défaut ne sont pas seulement déclarées, mais également définies dans l'interface.
la source