Giriş
- Access modifier tipine bakmaksızın nesnenin tanımladığı - kalıtımla gelen hariç - ismi belirtilen metodu döner. - Class.getDeclaredMethod bir metodunun istenilen şeyi bulabilmesi için metoda geçilen parametrelerin de yani doğru verilmesi gerekir.
Elimizde şöyle bir sınıf olsun. Bu sefer erişmek istediğimiz metod protected.
Örnek - public method
Elimizde şöyle bir sınıf olsun. Erişmek istediğiniz metod public.public class Foo {
public void isFoo(Object obj) {
...
}
}
Metodu bulmak için şöyle yaparız.Class c = Foo.class;
Method m = c.getDeclaredMethod("isFoo", Object.class);
Metodumuz birden çok parametre alsaydı ikinci parametreyi bir dizi olarak geçebilirdik.String methodName = ...;
Class[] types = ...;
Method method = c.getDeclaredMethod(methodName, types);
Örnek - protected methodElimizde şöyle bir sınıf olsun. Bu sefer erişmek istediğimiz metod protected.
public class PrivateCar {
private String color;
protected void drive() {
System.out.println("this is private car! the color is:" + color);
}
}
Şöyle yaparız.Class clazz = loader.loadClass("javaReflect.test.PrivateCar");
Method method = clazz.getDeclaredMethod("drive");
Örnek - Method İmzası
MyClass sınıfı içinde bir main metodu olsun. public static void main(String[] args) {...}
Onu bulmak için şöyle yaparız. Burada metod imzasında parametrenin String[] olduğunu belirmek gerekiyor.Örnek
Elimizde Foo ata sınıfı olsun.
Method mainMethod = MyClass.classgetDeclaredMethod("main", String[].class);
Diğer
Elimizde Foo ata sınıfı olsun.
public class Foo {
public void doit() {
System.out.println("good");
}
}
Bu sınıftan kalıtan Bar sınıfı olsunpublic class Bar extends Foo {
public void doit() {
System.out.println("bad");
}
}
Method nesnesine Foo.class olarak erişsek bile ve hatta çağırırken yine Foo sınıfına cast etsek bile Bar sınıfının doIt() metodu çağrılır. Çıktı olarak bad alırız.Bar b = new Bar();
/* Using Foo.class */
Method m = Foo.class.getDeclaredMethod("doit", new Class[]{});
m.invoke((Foo)b, new Object[]{});
Hiç yorum yok:
Yorum Gönder