Java Reflection Nedir, Nasıl Kullanılır
Java Reflection (Yansıtma) bir uygulama geliştirme arayüzü olup, o anki Java Sanal Makinesindeki sınıfları, arayüzleri ve nesneleri yansıtan, temsil eden kütüphanedir. Özellikle geliştirme araçları yazarken yansıtma kütüphanesine ihtiyaç duyarız. Yansıtma kütüphanesini kullanarak;
- Bir nesnenin sınıfını belirleriz
- Sınıfın sahaları, metodları, yapıcıları, üst sınıfları ve değişkenleri hakkında bilgiler alabiliriz
- Bir arayüze ait olan sabit ve metod tanımlamalarını tespit ederiz
- Çalışma zamanına kadar ismi bilinmeyen bir sınıf örneği yaratabiliriz (Bir bakıma çalışma zamanında yeni sınıflar yaratabilirsiniz)
- Çalışma zamanına kadar ismi bilinmese de sahaların değerini ayarlar ve alabiliriz.
- Aynen çalışma zamanına kadar bilinmeyen metodları çalıştırabiliriz.
- Çalışma zamanına kadar bileşenleri ve boyutu bilinmeyen diziler yaratabilir, daha sonra bu dizinin bileşenlerini değiştirebiliriz.
Çok önemli bir hatırlatma, standart java yapılarıyla yapabileceğiniz işleri Java yansıtma kütüphanesiyle yapmayın. Umulmadık zorluklar ve sorunlarla karşılaşabilirsiniz.
Şimdi aşama aşama yansıtma kütüphanesini inceleyelim. Temel olarak yapmak istediğimiz ilk işlem bir nesnenin hangi sınıfa ait olduğunu bulmaktır. Sınıfı bulduktan sonra bu sınıf yardımıyla yansıtma kütüphanesinin tüm nimetlerinden faydalanabiliriz. Bunu yapmak için nesne.getClass() (Class döndürmektedir) çağrımında bulunuruz. Bu aldığımız Class tipinde nesneyi kullanarak nesnemizin metodlarını listeleyebilir, sahalarını listeleyebilir, istediğimiz sahanın get ve set metodlarını bulup çalıştırabiliriz.
Aşağıda çok basit bir, nesnenin tüm metodlarını ekrana yazdıran kodu görebilirsiniz:
// bize gerekecek tum siniflar bu pakette
import java.lang.reflect.*;
import java.util.ArrayList;
public class MetodYazdir {
public static void main(String[] args) {
try {
// once ArrayList sinifinin Class nesnesini alalim
// getClass() metodu da kullanilabilir
Class c = ArrayList.class;
// daha sonra bu sinif icerisindeki tum metodlari cekelim
Method[] m = c.getDeclaredMethods();
// ve bu metod dizisini dolasarak bilgilerini ekrana yazalim
for (int i = 0; i<0; i++) System.out.println(m[i].toString());
}
catch(Exception e){ e.printStackTrace(); }
}
}
Bu kodu çalıştırdığınız zamanpublic void java.util.ArrayList.add(int,java.lang.Object)
public boolean java.util.ArrayList.add(java.lang.Object)
public java.lang.Object java.util.ArrayList.clone()
…………………………………
Şeklinde uzayıp giden ve ArrayList sınıfının metodları erişim ve parametre bilgilerini gösteren çıktıyı göreceksiniz.
Bir yansıtma işlemi yapabilmek için temel olarak ilk yapılması gereken Class nesnesine ulaşmaktır. Bunun için farklı yöntemler vardır.
Class c = Class.forName("java.lang.String");
Class c = int.class;
Class c = Integer.TYPE;
Class c = Ogrenci.getClass();
Bu Class nesnesini aldıktan sonra bu nesne içerisindeki metotlar kullanılarak her türlü bilgi (sınıfla ilgili olan) rahatça alınabilir. Aşağıdaki bağları inceleyerek bu konuda hakkında daha ayrıntılı bilgilere ulaşabilirsiniz. Ayrıca örnek kodların (açıklamalı) içerisindeki ClassParser sınıfını her türlü projenizde ihtiyaçlarınız doğrultusunda kullanabilirsiniz.Class c = int.class;
Class c = Integer.TYPE;
Class c = Ogrenci.getClass();
5 yorum:
Tesekkurler, cok yararli bir anlatim olmus.
Bu konuyu Türkçe dinlemek benim icin sans oldu sonunda anladım.
Tesekkurler
Yorumlarınız için ben teşekkür ederim.
ustad ben konuya yeni basladım belki tamda yerimi degilmi bilmiyorum ama sunu ogrenmek isterim bu java dokumantasyon yada javadoc ben nasıl kullanabilirim yani bir metod ve ya java ile ilgi bir kod aradıgımda bu kutuphane bilgisini nasıl orenmek gerekir yada yanlış bir kod yazdıgımda bu javadoc tan nasıl yararlanabiliriz bu konuda daha detaylı bir bilgi vermeniz mumkunmudur
saygılar
Soruları anladığım kadarıyla yanıtlayayım:
- Javadoc kullanarak geliştirilen kodlara bilgi parçacıkları koymak için: http://www.farukbozan.com/2010/04/javadoc-olusturmak/ http://www.oracle.com/technetwork/java/javase/documentation/index-137868.html
- Java belgelemeyi kullanmak için de: http://docs.oracle.com/javase/6/docs/api/ adresinde soldaki tüm sınıflar bilgisinden veya yukarıdaki index bilgisinden yararlanabilirsiniz.
Yorum Gönder