Java Reflection Kullanımı
Merhaba arkadaşlar ,
Reflection (yansıtma) runtime da o anki sanal makinede olan sınıfların , metodları, yapıcıları, üst sınıfları ve değişkenleri hakkında bilgiler alabiliriz .Yani bir sınıfa ait olan sabitleri ve metod tanımlamaların hepsini tespit edebiliriz.
Bir örnek yapalım ilk önce testte kullanabilmemiz için OrnekSinif.java isminde bir class oluşturalım.
ReflectionClass.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
package io.bilisim.reflection; /** * * @author mehmetkilic */ public class ReflectionClass { private int sayi; public void goster() { System.out.println("goster() aldığı parametre yok"); } public String gosterString(String temp) { System.out.println("gosterString() String parametresi : " + temp); return temp; } public int gosterInteger(int temp) { System.out.println("gosterInterger() Integer parametresi : " + temp); return temp; } public void setSayi(int sayi) { this.sayi = sayi; System.out.println("setSayi() setlenen sayi : " + sayi); } public void gosterSayi() { System.out.println("gosterSayi() : " + this.sayi); } } |
Şimdi bu sınıfımızı çalışma zamanı neler oluyor inceliyelim metodların isimlerini ,dönüş değerlerini,
dönüş tiplerini,varsa sabitlerin isimlerini default değerlerini runtime da görelim, hatta test ettiğimiz ReflectionClass sınıfının metodlarını reflection ile çalıştırabilir dönüş değerlerini alabiliriz. ReflectionTester.java isimli bir class oluşturarak testimize başlayalım.
ReflectionTester.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
package io.bilisim.reflection; import java.lang.reflect.Method; /** * * @author mehmetkilic */ public class ReflectionTester { public static void main(String[] args) { try { // İlk önce test edeceğimiz Clası çağırıyoruz ve nesnemize atıyoruz. // iki türlüde kullanabilrisiniz. // Class cls = ReflectionClass.class; Class cls = Class.forName("io.bilisim.reflection.ReflectionClass"); // Metodları okumaya başlayalım metod isimleri, // dönüş tipleri,default değeri,kaç parametre alıyorsa sayısı // parametlerin isimleri ve çoğu bilgiye oluşturduğumuz // Class nesnesinin getDeclaredMethods() // metodunu çağırarak çekebiliriz. for (Method m : cls.getDeclaredMethods()) { m.getName(); m.getReturnType(); m.getParameterCount(); System.out.println(" Metod ismi : " + m.getName() + " n" + " Metod Dönüş Tipi : " + m.getReturnType() + " n" + " Parametre Sayısı : " + m.getParameterCount()); } } catch (Exception ex) { ex.printStackTrace(); } } } |
Çıktısı :
Şimdi ise reflection ile çalışma zamanı sınıfımızın içindeki bir metoda parametre yollayarak çağıralım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
package io.bilisim.reflection; import java.lang.reflect.Method; /** * * @author mehmetkilic */ public class ReflectionTester { public static void main(String[] args) { try { // İlk önce test edeceğimiz Clası çağırıyoruz ve nesnemize atıyoruz. // iki türlüde kullanabilrisiniz. // Class cls = ReflectionClass.class; Class cls = Class.forName("io.bilisim.reflection.ReflectionClass"); // Clasımıza instance açıyoruz. Object obj = cls.newInstance(); //Class tipinde bir dizi oluşturuyoruz //Çünkü metodumuzu çağırdığımızda bizden argument istiyor ise //O tipte diziye parametre nesnesi atıyoruz Class[] paramStringa = new Class[1]; paramStringa[0] = String.class; //Metodumuzu aşşağıdaki şekilde parametre dizisini göndererek çağırıyoruz Method m = cls.getMethod("gosterString", paramStringa); // Reflection kütüphanesinde metodları çektiğimizde invoke //metdoduyla parametreleri yollarız . //dikkat ettiyseniz 'obj' nesnesini sadece instance ettik runtime da //metodu çağırdık 'cls' referansıyla parametre yolladık Object o = m.invoke(obj, new String("www.bilisim.io")); //ve ilk gitti metodu çalıştırdı ve //metodun içindekileri yazdı sonrasında //metodun dönüş değerini alıp yazdıralım String cikti = o.toString(); System.out.println("En son method'un dönüş değeri : " + cikti); } catch (Exception ex) { ex.printStackTrace(); } } } |
Çıktısı :
Umarım yararlı olmuştur
İyi Çalışmalar