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
沒有留言:
張貼留言