Tutorial for Application Development



Monday 4 October 2010

Java reflect มุมกลับแห่งชีวิตกับการสร้างและเรียกใช้แบบ Dynamic

แหะๆ ตั้งชื่อหัวข้อซะเวอร์ จริงๆไม่มีอะไรหรอกครับวันนี้แค่จะพูดถึงการใช้งานเกี่ยวกับ java.lang.reflect หลายท่านที่เป็นโปรอยู่แล้วคงคิดว่ามันธรรมดา ๆ แต่สำหรับผมแล้ว มันน่าทึ่งและนำไปใช้ประโยชน์ได้มากเลยครับ ไม่พูดมากไปดูตัวอย่างกันเลยละกัน

SampleClass
public class SampleClass {
private String prop1;
private String prop2;
public SampleClass(String prop1,String prop2){
this.prop1=prop1;
this.prop2=prop2;
}
public String getProp1() {
return prop1;
}
public void setProp1(String prop1) {
this.prop1 = prop1;
}
public String getProp2() {
return prop2;
}
public void setProp2(String prop2) {
this.prop2 = prop2;
}
}

Create Instance and Invoke Method by Name
Require Import
java.lang.reflect.Constructor , java.lang.reflect.Method
public void callByName(){
try{
//Create Instance from Constructor
Class c=SampleClass.class;
Constructor cons=c.getConstructor(new Class[]{String.class,String.class});
Object obj=cons.newInstance(new Object[]{"Java",""});

//invoke method getProp1 by send methodName
Method m=c.getMethod("getProp1", new Class[]{});
String value=(String)m.invoke(obj, new Object[]{});
System.out.println("Prop1 "+value);

//invoke method setProp2(String prop2) by send methodName
m=c.getMethod("setProp2", new Class[]{String.class});
m.invoke(obj, new Object[]{"PHP"});

m=c.getMethod("getProp2", new Class[]{});
value=(String)m.invoke(obj, new Object[]{});
System.out.println("Prop2 "+value);

//This Object is the same normal way

SampleClass sc=(SampleClass)obj;
System.out.println("Norm Prop1 "+sc.getProp1());
System.out.println("Norm Prop2 "+sc.getProp2());


}catch(Exception e){}
}

Result Value

Prop1 Java


Prop2 PHP


Norm Prop1 Java



Norm Prop2 PHP



เห็นมั้ยครับจะว่าไปมันก็คือการ Execute หรือ Create instance ผ่านทาง String input ธรรมดาๆ นี่แหละ แต่ถ้ารู้จักประยุกต์ใช้ให้ดีๆ จะเป็นประโยชน์มาก ลองดูครับ
หรือหากสงสัยหรือไ ม่รู้จะเอาไปใช้ทำอะไรก็ Comment ไว้ตรงนี้ได้น่ะ ผมเข้ามา Update ทุกวัน

No comments: