Soru Tarihi
instanceof operatörü, nesnenin belirli bir tür (sınıf veya arayüz) ile ait olup olmadığını kontrol etmek için Java'da tanıtılmıştır. Bu, miras alma, polimorfizm ve heterojen nesne koleksiyonları ile çalışmak için geçerli hale gelmiştir.
Problemi
Türe ait olma kontrolü olmadan, tür dönüşümü sırasında ClassCastException alabilirsiniz. instanceofın yanlış kullanımı kodun mimarisini bozabilir ve anti-paternlere (örneğin, polimorfizm yerine sık kullanım) yol açabilir.
Çözüm
instanceof operatörü true döner, eğer nesne null değilse ve kontrol edilen tür ile ya da belirtilen arayüzü uyguluyorsa.
Kod örneği:
Object obj = "Hello"; if (obj instanceof String) { String str = (String) obj; System.out.println(str.toUpperCase()); }
Anahtar özellikler:
obj == null ise obj instanceof SomeClass ne döner?
instanceof her zaman false döner, eğer nesne null ise, kontrol edilen türden bağımsız olarak. Bu, NullPointerException'ın önlenmesi için önemlidir.
Bir nesnenin bir arayüze ait olup olmadığını kontrol etmek için instanceof kullanılabilir mi?
Evet. instanceof, bir nesnenin gerekli arayüzü uygulayıp uygulamadığını kontrol etmek için kullanılır, sadece belirli bir sınıfa ait olma durumunu değil.
Kod örneği:
Runnable r = () -> {}; System.out.println(r instanceof Runnable); // true
Sınıf --release 16+ ile derleniyorsa ve instanceof için desen eşleştirme zaten entegre edilmişse ne olur?
Java 16+ ile instanceof operatörü desen eşleştirmeyi destekler, yani kontrol sırasında bir değişken belirtebilir ve açık tür dönüşümünü önleyebilirsiniz.
Kod örneği:
Object obj = "Test string"; if (obj instanceof String str) { System.out.println(str.length()); }
instanceofın yaygın kullanımı (OOP ihlali)instanceof çağrılması (yapısal hata)Büyük bir projede, işleme mantığını bir dizi if (obj instanceof X)... üzerinde inşa ettiler, yöntemlerin yeniden tanımlanması yerine. Bu, bakımı zorlaştırdı: yeni bir türün eklenmesi tüm kontrollerin değiştirilmesini gerektiriyordu.
Artıları:
Eksileri:
Benzer bir projede genişletilebilir bir hiyerarşi için soyut yöntemler kullandılar ve instanceof sadece özel kenar durumlarının kontrolü için kullanıldı.
Artıları:
Eksileri: