ProgramlamaJava geliştirici

Java'da varsayılan yöntemlere (default methods) sahip arabirimler nedir ve bunların kullanımına ilişkin ayrıntılar nelerdir?

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

Cevap.

Java 8 ile birlikte varsayılan yöntemler kavramı ortaya çıktı — bu, arabirim içinde tanımlanan ve uygulanmış yöntemlerdir. Mevcut uygulamalarla uyumu bozmeden arabirime yeni yöntemler eklemeye olanak tanır.

Sözdizimi:

public interface MyInterface { default void printHello() { System.out.println("Merhaba!"); } }

Özellikler ve ayrıntılar:

  • Bir sınıf, aynı varsayılan yöntem imzasına sahip iki arabirimi uygularsa, bir çelişki oluşur ve sınıfın bu yöntemi geçersiz kılması gerekir.
  • Varsayılan yöntemler, Object sınıfındaki yöntemleri (örneğin, equals, hashCode) geçersiz kılabilir.
  • Arabirimlerde statik yöntemler de tanımlanabilir.

Kurnaz bir soru.

Bir sınıf, aynı varsayılan yönteme sahip iki arabirimi uygularsa ve bu yöntemi geçersiz kılmazsa ne olur?

Cevap: Derleyici "class... inherits unrelated defaults for ... from types ... and ..." hatasını verir ve bu yöntemi derlemede açıkça uygulamak gerekir.

Örnek:

interface A { default void doSomething() { System.out.println("A"); } } interface B { default void doSomething() { System.out.println("B"); } } class C implements A, B {} // Derleme hatası!

Çözüm:

class C implements A, B { @Override public void doSomething() { A.super.doSomething(); // veya B.super.doSomething() } }

Bilinmeyen ayrıntılar nedeni ile gerçek hata örnekleri.


Hikaye

Bir ekip projesinde API birleştirme için ortak arabirime varsayılan bir yöntem eklendi. Eski arabirim uygulamaları yeni yöntemi geçersiz kılmadı, bu da beklenmedik bir davranışa sebep oldu çünkü varsayılan uygulama beklenen mantık yerine çalıştı. Sonuç olarak, kullanıcılar işlevsellik kaybı fark etti.


Hikaye

Bir kütüphaneyi genişletirken, geliştiricilerden biri ortak arabirime iş mantığı içeren bir varsayılan yöntem ekledi. Başka bir arabirimde farklı bir davranışa sahip aynı yöntemin eklenmesi, miras alma çelişkisine neden oldu ve yeni uygulamaların derlenmesini engelledi.


Hikaye

Bir geliştirici, arabirimde hashCode adıyla bir varsayılan yöntem kullanmaya çalıştı ve bunun alt sınıflardaki yöntemin geçersiz kılınmasına etki edeceğini umdu, fakat derleyici bunu yapmasına izin vermedi. Bu, hata nedenlerinden sonda uzunca bir müzakereye ve arabirim yapısının yeniden tasarımına yol açtı.