2010年6月13日 星期日

Reflecting (反射物件)

1. 說明:
Reflecting 為動態載入物件與類別的方法, Java 提供 Class, Object, Method 等物件,

讓每個物件都能在執行的時後知道自己的 類別, 實例, 方法等資訊,

也可有動態載入, 也能作到介面分派的行為, 透過開發時自由在抽像物件的跳拖與轉換,

達到物件的彈性 .

還有兩種方式可用 class
1. 用 object instace
2. 用 class literal 的 .calss 可得到此 class object



2. 範例:

a 動態載入類別, 並呼叫該類別的實例, 並取得該類別的方法, 透過 Method 物件來呼叫
ReflectingTest.java
{{{
import java.lang.reflect.Method;

public class ReflectingTest {
public static void main(String[] args) throws Exception {
Class cls = Class.forName("foo");
Object foo = cls.newInstance();
Method method = cls.getMethod("Hello", null);
method.invoke(foo, null);
}

}

class foo {
public void Hello() {
System.out.println("Hello");
}
}


}}}


b. 使用 Class 的 .class 取得 class 載入
FooTest.java
{{{
package net.asgc.gap.portal.util;

import java.lang.reflect.Method;
import net.asgc.gap.portal.util.VQSClientProperties;
public class FooTest {
public static void main(String[] args) {
try{
for (Method m : VQSClientProperties.class.getMethods() )
System.out.println("VQSClientProperties>>" + m);


}catch(Exception e){
e.printStackTrace();
}
}


}

}}}

可以看到使用 VQSClientProperties 的 class 內建的 .class 將它轉成 Class 後取
它的 Methods().


參考:
Java class doc
Java Object doc
Java Method doc

沒有留言:

張貼留言