ProgramlamaJava geliştirici

Anonim ve iç içe sınıflarla çalışmanın ana özelliklerini ve bunların kullanımındaki tuzakları anlatın.

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

Cevap.

İç içe sınıflar - bir sınıfın içinde tanımlanan sınıflardır. Aşağıdaki türleri vardır:

  • Statik iç sınıflar - dış sınıfın örneklerine erişme olanağı olmaksızın statik olarak tanımlanmış iç sınıflar.
  • İç sınıflar - dış sınıfın tüm üyelerine erişim sağlayan dinamik iç sınıflar.
  • Anonim sınıflar - genellikle kullanım yerinde tanımlanan ve oluşturulan, isimsiz iç sınıflardır; çoğunlukla arayüzlerle/soyut sınıflarla çalışırken kullanılır.

Bir anonim sınıf örneği:

Button b = new Button(); b.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // tıklama eylemi } });

Özellikler:

  • Anonim sınıflar sadece dış alanın final (etkili final) değişkenlerine erişebilir.
  • Her iç sınıf örneği, dış sınıfın bir örneğine dolaylı olarak bir referans tutar.
  • Türüne (static/iç) bağlı olarak, bellek sızıntıları veya beklenmeyen bağımlılıklar meydana gelebilir.

Aldatıcı soru.

İç sınıf (non-static inner) statik yöntemler veya değişkenler içerebilir mi?

Cevap: Hayır, sadece sabitler (static final) içerebilir. Sadece statik iç sınıf (static nested class), static üyeleri barındırabilir.

Doğru kullanım şöyle olmalı:

class Outer { static class StaticNested { static int x = 10; // TAMAM } }

Konuyla ilgili ince noktaların bilinmemesi nedeniyle meydana gelen gerçek hata örnekleri.


Hikaye

Bir Android uygulamasında iç sınıf bir olay işleyici olarak kullanıldı. İşleyici, static bir alanda saklandı ve Activity'e dolaylı bir referans tuttu, bu da yok olduğunda bellek sızıntısına neden oldu ve uygulama "sızmaya" başladı, hatta OutOfMemoryError'a kadar gitti.


Hikaye

Bir mikro hizmette, dıştaki değişkenleri referans alan anonim sınıflar kullanıldı. Sonrasında refaktörizasyon sırasında değişkenler etkili olarak final olmadı ve kod derlenmedi; geliştiriciler bu kısıtlamayı hatırlayana kadar uzun süre nedeni aradılar.


Hikaye

Bir kütüphanede iç sınıflar içinde statik değişkenler kullanıldı, bunun sıradan bir uygulama olduğunu düşündüler. Yeni JDK sürümlerinde proje derlenmeyi durdurdu çünkü standart, kısıtlamalara daha katı bir şekilde uyum sağlamaya başladı. Acil bir mimari yeniden çalışma gerekiyordu.