Toutes les bonnes réponses ici. Je voudrais ajouter une autre utilisation pratique de la fonction statique dans l'interface. L'astuce vient du livre - Effective Java, 3e édition de Joshua Bloch dans le chapitre 2: Créer et détruire un objet.
Static functions can be used for static factory methods.
Les méthodes de fabrique statique sont des méthodes qui retournent un objet. Ils fonctionnent comme constructeur. Dans des cas spécifiques, la méthode de fabrique statique fournit un code plus lisible que l'utilisation du constructeur.
Citation du livre - Effective Java, 3e édition par Joshua Bloch
Avant Java 8, les interfaces ne pouvaient pas avoir de méthodes statiques. Par convention, les méthodes de fabrique statique pour une interface nommée Type ont été placées dans une classe compagnon non instable (élément 4) nommée Types.
L'auteur donne un exemple de collections où une telle méthode de fabrique statique est implémentée. En vérifiant le code, Josh Bloch peut être considéré comme le premier auteur de la classe Collections. Bien que Collections soit une classe et non une interface. Mais le concept s'applique toujours.
Par exemple, le Java Collections Framework a quarante-cinq implémentations utilitaires de ses interfaces, fournissant des collections non modifiables, des collections synchronisées, etc. Presque toutes ces implémentations sont exportées via des méthodes de fabrique statiques dans une classe non instable (java.util.Collections). Les classes des objets retournés sont toutes non publiques.
En outre, il explique que l'API n'est pas seulement plus petite, elle contribue à la lisibilité du code et à la facilité de l'API.
Ce n'est pas seulement l'essentiel de l'API qui est réduit mais le poids conceptuel: le nombre et la difficulté des concepts que les programmeurs doivent maîtriser pour utiliser l'API. Le programmeur sait que l'objet retourné a précisément l'API spécifiée par son interface, il n'est donc pas nécessaire de lire la documentation de classe supplémentaire pour la classe d'implémentation.
Voici l'une des méthodes statiques de la classe java.util.Collections:
public static <T> Collection<T> unmodifiableCollection(Collection<? extends T> c) {
return new UnmodifiableCollection<>(c);
}