Semua jawaban bagus di sini. Saya ingin menambahkan penggunaan praktis lain dari fungsi statis di antarmuka. Tip datang dari buku - Java Efektif, Edisi ke-3 oleh Joshua Bloch di Bab2: Membuat dan Menghancurkan Objek.
Static functions can be used for static factory methods.
Metode pabrik statis adalah metode yang mengembalikan suatu objek. Mereka bekerja seperti konstruktor. Dalam kasus tertentu, metode pabrik statis menyediakan kode yang lebih mudah dibaca daripada menggunakan konstruktor.
Mengutip dari buku - Effective Java, Edisi ke-3 oleh Joshua Bloch
Sebelum Java 8, antarmuka tidak dapat memiliki metode statis. Menurut konvensi, metode pabrik statis untuk antarmuka bernama Type dimasukkan ke dalam kelas pendamping noninstantiable (Item 4) bernama Jenis.
Penulis memberikan contoh Koleksi di mana metode pabrik statis tersebut diterapkan. Memeriksa kodenya, Josh Bloch dapat dilihat sebagai penulis pertama kelas Koleksi. Meskipun Koleksi adalah kelas dan bukan antarmuka. Namun konsep tersebut tetap berlaku.
Misalnya, Java Collections Framework memiliki empat puluh lima implementasi utilitas dari antarmukanya, menyediakan koleksi yang tidak dapat dimodifikasi, koleksi yang disinkronkan, dan sejenisnya. Hampir semua implementasi ini diekspor melalui metode pabrik statis dalam satu kelas noninstantiable (java.util.Collections). Kelas dari objek yang dikembalikan semuanya nonpublik.
Lebih lanjut dia menjelaskan bahwa API tidak hanya lebih kecil, tetapi juga membantu keterbacaan kode dan kemudahan API ..
Bukan hanya sebagian besar API yang dikurangi tetapi bobot konseptualnya: jumlah dan tingkat kesulitan konsep yang harus dikuasai oleh pemrogram untuk menggunakan API. Pemrogram mengetahui bahwa objek yang dikembalikan memiliki API yang ditentukan dengan tepat oleh antarmukanya, jadi tidak perlu membaca dokumentasi kelas tambahan untuk kelas implementasi.
Berikut adalah salah satu metode statis dari kelas java.util.Collections:
public static <T> Collection<T> unmodifiableCollection(Collection<? extends T> c) {
return new UnmodifiableCollection<>(c);
}