Java Language Pourquoi utiliser les méthodes par défaut?


Exemple

La réponse simple est que cela vous permet de faire évoluer une interface existante sans casser les implémentations existantes.

Par exemple, vous avez l'interface Swim que vous avez publiée il y a 20 ans.

public interface Swim {
    void backStroke();
}

Nous avons fait un excellent travail, notre interface est très populaire, il y a beaucoup d'implémentations à ce sujet partout dans le monde et vous n'avez pas le contrôle de leur code source.

public class FooSwimmer implements Swim {
    public void backStroke() {
         System.out.println("Do backstroke");
    }
}

Après 20 ans, vous avez décidé d'ajouter de nouvelles fonctionnalités à l'interface, mais il semble que notre interface soit gelée car elle brisera les implémentations existantes.

Heureusement, Java 8 introduit une toute nouvelle fonctionnalité appelée méthode par défaut.

Nous pouvons maintenant ajouter une nouvelle méthode à l'interface Swim .

public interface Swim {
    void backStroke();
    default void sideStroke() {
        System.out.println("Default sidestroke implementation. Can be overridden");
    }
}

Maintenant, toutes les implémentations existantes de notre interface peuvent encore fonctionner. Mais surtout, ils peuvent mettre en œuvre la méthode nouvellement ajoutée à leur propre rythme.

L'une des principales raisons de ce changement, et l'une de ses utilisations les plus importantes, réside dans le cadre des collections Java. Oracle n'a pas pu ajouter une méthode foreach à l'interface Iterable existante sans casser tout le code existant qui implémentait Iterable. En ajoutant des méthodes par défaut, l'implémentation Iterable existante héritera de l'implémentation par défaut.