ここですべての良い答え。静的関数の別の実用的な使い方をインターフェースに追加したいと思います。ヒントは、第2章「オブジェクトの作成と破棄」のJoshua Bloch著の本「Effective Java、3rd Edition」からきています。
Static functions can be used for static factory methods.
静的ファクトリメソッドは、オブジェクトを返すメソッドです。それらはコンストラクタのように機能します。特定のケースでは、静的ファクトリメソッドは、コンストラクタを使用するよりも読みやすいコードを提供します。
本からの引用-Joshua BlochによるEffective Java、3rd Edition
Java 8より前は、インターフェースに静的メソッドを含めることができませんでした。慣例により、Typeという名前のインターフェイスの静的ファクトリメソッドは、Typesという名前のインスタンス化できないコンパニオンクラス(アイテム4)に入れられました。
著者は、そのような静的なファクトリメソッドが実装されているコレクションの例を示します。コードを確認すると、Josh BlochはCollectionsクラスの最初の作成者と見なすことができます。コレクションはクラスであり、インターフェースではありません。しかし、コンセプトはまだ適用されます。
たとえば、Java Collections Frameworkには、そのインタフェースの45のユーティリティ実装があり、変更不可能なコレクション、同期されたコレクションなどを提供しています。これらの実装のほぼすべては、インスタンス化できない1つのクラス(java.util.Collections)の静的ファクトリメソッドを介してエクスポートされます。返されるオブジェクトのクラスはすべて非公開です。
さらに、APIが小さいだけでなく、コードの読みやすさとAPIの使いやすさにも役立つと彼は説明しています。
削減されるのはAPIの大部分だけではなく、概念上の重要性、つまりAPIを使用するためにプログラマーが習得しなければならない概念の数と難しさです。プログラマーは、返されたオブジェクトがそのインターフェイスで指定されたAPIを正確に持っていることを知っているので、実装クラスの追加のクラスドキュメントを読む必要はありません。
以下は、java.util.Collectionsクラスの静的メソッドの1つです。
public static <T> Collection<T> unmodifiableCollection(Collection<? extends T> c) {
return new UnmodifiableCollection<>(c);
}