Buradaki tüm iyi cevaplar. Arayüzde statik fonksiyonun başka bir pratik kullanımını eklemek istiyorum. İpucu, Bölüm 2: Creating and Destroying Object'teki - Effective Java, 3rd Edition, Joshua Bloch adlı kitaptan geliyor.
Static functions can be used for static factory methods.
Statik fabrika yöntemi, bir nesneyi döndüren yöntemlerdir. Yapıcı gibi çalışırlar. Belirli durumlarda, statik fabrika yöntemi, yapıcı kullanmaktan daha okunabilir kod sağlar.
Kitaptan alıntı - Effective Java, 3rd Edition by Joshua Bloch
Java 8'den önce arayüzlerin statik yöntemleri olamazdı. Kural olarak, Type adlı bir arabirim için statik fabrika yöntemleri, Türler adlı bir tamamlayıcı sınıfa (Öğe 4) yerleştirildi.
Yazar, böyle bir statik fabrika yönteminin uygulandığı bir Koleksiyonlar örneği verir. Kodu kontrol ederek Josh Bloch, Koleksiyonlar sınıfının ilk yazarı olarak görülebilir. Koleksiyonlar bir sınıf olmasına rağmen arayüz değil. Ancak konsept hala geçerli.
Örneğin, Java Collections Framework, değiştirilemeyen koleksiyonlar, senkronize edilmiş koleksiyonlar ve benzerleri sağlayan, kendi arayüzlerinde kırk beş yardımcı uygulama uygulamasına sahiptir. Bu uygulamaların neredeyse tamamı, sabit fabrika yöntemleriyle tek bir sabitlenemez sınıfta (java.util.Collections) dışa aktarılır. Döndürülen nesnelerin sınıflarının tümü kamuya açık değildir.
Ayrıca, API'nin yalnızca daha küçük olmadığını, kod okunabilirliğine ve API kolaylığına yardımcı olduğunu da açıklıyor.
Azaltılan sadece API'nin büyük kısmı değil, aynı zamanda kavramsal ağırlık: API'yi kullanmak için programcıların ustalaşması gereken kavramların sayısı ve zorluğu. Programcı, döndürülen nesnenin tam olarak arabirimi tarafından belirtilen API'ye sahip olduğunu bilir, bu nedenle uygulama sınıfı için ek sınıf belgelerini okumaya gerek yoktur.
İşte java.util.Collections sınıfındaki statik yöntemlerden biri:
public static <T> Collection<T> unmodifiableCollection(Collection<? extends T> c) {
return new UnmodifiableCollection<>(c);
}