ProgramlamaJava mimarı

Java arayüzlerinde statik yöntemler nedir ve soyut yöntemlerden nasıl farklıdır?

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap

Java 8 ile birlikte arayüzlerde statik yöntemler ortaya çıkmıştır. static anahtar kelimesi ile tanımlanır ve doğrudan arayüzde uygulanır. Statik yöntemler, uygulayan sınıflar tarafından miras alınmaz ve arayüzün adıyla çağrılır.

  • Statik yöntemin tanımı:
interface MathUtils { static int sum(int a, int b) { return a + b; } }
  • Çağrı: MathUtils.sum(1, 2);
  • Statik arayüz yöntemleri uygulayan sınıflarda geçersiz kılınamaz.
  • Arayüzle ilgili "yararlı" işlevler sağlar, ancak bir örneğin durumunu talep etmez.
  • Soyut yöntemler sınıf tarafından uygulanmalıdır; statikler hayır.

Tuzağa Düşüren Soru

Soru: Arayüzün statik bir yöntemi uygulayan sınıfın bir nesnesi üzerinden çağrılabilir mi?

Cevap: Hayır, bir arayüzün statik yöntemi her zaman arayüzün adıyla çağrılır, uygulama sınıfının örneği veya adı üzerinden değil. Aşağıdaki örnek bir derleme hatası verecektir:

MathUtils utils = new SomeMathUtilsImpl(); utils.sum(1, 2); // Hata! Gerekli: MathUtils.sum(1, 2)

Konunun inceliklerine dair gerçek hata örnekleri


Hikaye

Geliştiriciler, bir arayüzdeki statik yöntemi uygulayan sınıfta "geçersiz kılmaya" çalışarak bu yöntemi örnek üzerinden çağıracaklarını düşündüler. Sonuç olarak her zaman arayüzdeki sürüm çağrıldı ve bu, kullanırken yanlış iş mantığına yol açtı.


Hikaye

Kullanım amaçlı yöntemlerin bir sınıftan arayüze taşınması esnasında bazı kodlar örnek üzerinden çağrıyordu: obj.method(), bu artık mümkün olmadı ve tüm projede çağrıları InterfaceName.method() şeklinde yeniden düzenlemek zorunda kaldılar.


Hikaye

Eski Java sürümlerinin desteği, arayüzlere statik yöntemler eklendikten sonra derleme hatalarına yol açtı. Geliştiriciler, CI'de hangi derleyici sürümünün kullanıldığını kontrol etmedikleri için inşa düzenli olarak bozulmaya başladı.