Java – Reflection
Reflection java da sınıf, method, attribute gibi bilgilere erişmeyi ve bunlar üzerinde işlem yapmayı saglayan bir kütüphanedir. Reflection ile dinamik olarak nesnenin özelliklerine erişebilirsiniz.
Öncelikle üzerinde çalışmamız için OrnekSinif isminde bir sınıf oluşturalım.
Şimdi bu sınıftaki metodları listeleyelim öncelikle sınıfa ait class nesnesini almamız gerekiyor sonrasında o sınıfa ait istediğimiz bilgiye erişebiliriz.
Bu kodun çıktısı aşağıdaki gibi olacaktır.
public void OrnekSinif.kayit()
public java.lang.String OrnekSinif.degerDondur()
public int OrnekSinif.topla(int,int)
Şimdi bu sınıfa ait constructer ları (kurucu metodları) listeleyelim
Bu kodun çıktısıda aşağıdaki gibi olacaktır göründüğü gibi iki adet kurucu metodumuzu listeledi.
public OrnekSinif()
public OrnekSinif(java.lang.String)
Reflection ile benzer şekilde fieldları, annotationları, super classları, interfaceleri vs.. alabiliriz. Bunlar haricinde java da yine dinamik olarak nesneler oluşturulabiliyor. Eğer Class.forName(“OrnekSinif”).newInstance(); dersek bize OrnekSinif tipinde bir nesne oluşturacaktır.
Selamlar. Yazilar guzel. Reflection kolaylastirmak icin bir mini kutuphane var, isteyen bakabilir..
http://fest.easytesting.org/reflect/wiki/pmwiki.php
Fest’in diger kutuphaneleri de cok hos.
Melih Hocam Selamlar;
Reflection konusunu merak edenler için güzel bir başlangıç.
Fakat ekibimdeki arkadaşları mümkün mertebe reflection’dan uzak tutmaya çalışıyorum. Birşeylerin runtime ‘da şekil alıyor olması hata olduğunda hatayı bulmayı zorlaştırıyor.
Reflection’ı genelde kişisel geliştirilen projeler veya finalize edilme aşamasındaki projelerde veya çalışan personlin değişmediği stabil şirketlerde uygun görüyorum..
Genelde zaten reflection kod üretimi gibi bir defaya mahsus ve runtime aşamasında tekrar edilmeyen işlerde tercih ediliyor.
Aksi halde bilinçsiz ellerde kötü bir silaha dönüşebilir :)
Kolay gelsin..
Ibrahim bey, su anki pek cok populer projede Reflection kullaniliyor . Ornegin Dependency Injection, sirf Reflection’a dayaniyor. Ama temelde sizinle hemfikirim. benim gorusume gore reflection bir API icerisine sarmalanirsa kullanilmasinda mahsur yok. commons beans, ya da annotation tabanli pek cok kutuphanede reflection sart oluyor. bu sekilde bilincsiz ellere dusmesine de musade edilmez.