İç içe arayüzler (inner interfaces), diğer sınıfların veya arayüzlerin içinde tanımlanan arayüzlerdir. İlk olarak, büyük sınıfları yapılandırmak ve uygulama ayrıntılarını gizlemek amacıyla dilde ortaya çıkmıştır. Bu kapsülleme, sözleşimleri mantıksal olarak gruplamayı sağlamakta ve kodun okunabilirliği ile bakımını belirgin şekilde artırmaktadır.
Java'nın ilk sürümlerinden itibaren, sınıfların ve diğer arayüzlerin içinde statik ve dinamik iç içe arayüzlerin tanımlanması mümkün olmuştur. Bu uygulama, büyük kütüphanelerde (örneğin, Java koleksiyonlarında) yaygınlaşmıştır.
İç içe arayüzlerin görünürlüğü ve kullanım alanının yanlış anlaşılması, sıklıkla API tasarım hatalarına ve uygulama mimarisinin karmaşıklaşmasına yol açmaktadır. Onları örnek üyeleri gibi kullanamazsınız, çünkü her zaman özünde statiktirler.
İç içe arayüzler, daha modüler bir yapı sağlamak ve yalnızca kapsayıcı sınıfa ait olan özel sözleşimleri belirginleştirmek için kullanılır. Örneğin, Map içindeki Entry arayüzü:
public interface Map<K, V> { interface Entry<K, V> { K getKey(); V getValue(); } Set<Entry<K, V>> entrySet(); }
Ana özellikler:
Soru 1: Dıştaki sınıfın örneğine sahip olmadan iç içe arayüzün bir örneğini yaratmak mümkün müdür?
Evet, iç içe arayüzün örneği ayrı olarak, dıştaki nesneyi oluşturmanıza gerek kalmadan uygulanabilir, çünkü arayüz statik olarak iç içedir.
Soru 2: Sınıf içinde iç içe arayüzün görünürlük alanı nedir?
Görünürlük, modifikasyonlarla (public, protected, private, package-private) düzenlenir. Ancak genellikle dışarıdan erişim gerekiyorsa public olarak yapılır.
Soru 3: İç içe arayüz, iç içe arayüzler içerebilir mi?
Evet, arayüzlerin her türlü iç içe olmasına izin verilir, ancak pratikte okunabilirliği azaltma nedeni ile nadiren karşılaşılır.
Bir büyük projede, Service sınıfının içinde 10'dan fazla iç içe arayüz tanımlandı. Bağlantı sayısı arttıkça, navigasyon ve kodun anlaşılması kötüleşti.
Artılar:
Eksiler:
DataProcessor sınıfında yalnızca DataProcessor içinde uygulanmış bir iç içe arayüz olarak Validator tanımlandı.
Artılar:
Eksiler: