En Java 8, les interfaces peuvent contenir des méthodes implémentées, des méthodes statiques et les méthodes dites "par défaut" (que les classes d'implémentation n'ont pas besoin de remplacer).
À mon avis (probablement naïf), il n’était pas nécessaire de violer des interfaces comme celle-ci. Les interfaces ont toujours été un contrat que vous devez remplir, et c'est un concept très simple et pur. Maintenant, c'est un mélange de plusieurs choses. À mon avis:
- les méthodes statiques n'appartiennent pas aux interfaces. Ils appartiennent à des classes d'utilitaires.
- Les méthodes "par défaut" n'auraient absolument pas dû être autorisées dans les interfaces. Vous pouvez toujours utiliser une classe abstraite à cette fin.
En bref:
Avant Java 8:
- Vous pouvez utiliser des classes abstraites et régulières pour fournir des méthodes statiques et par défaut. Le rôle des interfaces est clair.
- Toutes les méthodes d'une interface doivent être remplacées par l'implémentation de classes.
- Vous ne pouvez pas ajouter une nouvelle méthode dans une interface sans modifier toutes les implémentations, mais c'est en fait une bonne chose.
Après Java 8:
- Il n'y a pratiquement aucune différence entre une interface et une classe abstraite (hormis l'héritage multiple). En fait, vous pouvez émuler une classe normale avec une interface.
- Lors de la programmation des implémentations, les programmeurs peuvent oublier de remplacer les méthodes par défaut.
- Il y a une erreur de compilation si une classe tente d'implémenter deux interfaces ou plus ayant une méthode par défaut avec la même signature.
- En ajoutant une méthode par défaut à une interface, chaque classe d'implémentation hérite automatiquement de ce comportement. Certaines de ces classes n'ont peut-être pas été conçues avec cette nouvelle fonctionnalité, ce qui peut poser problème. Par exemple, si quelqu'un ajoute une nouvelle méthode par défaut
default void foo()
à une interfaceIx
, la classeCx
implémentantIx
et disposant d'unefoo
méthode privée avec la même signature ne compile pas.
Quelles sont les principales raisons de ces changements majeurs et quels sont les nouveaux avantages (le cas échéant)?
@Deprecated
catégorie! Les méthodes statiques sont l'une des constructions les plus maltraitées de Java, à cause de l'ignorance et de la paresse. De nombreuses méthodes statiques impliquent généralement des programmeurs incompétents, augmentent le couplage de plusieurs ordres de grandeur et sont un cauchemar pour les tests unitaires et les refactorisations lorsque vous réalisez pourquoi elles sont une mauvaise idée!