Crazy knowledge base

使用反射(reflection)的简单例子

运用反射访问类的私有方法是一件比较有趣的事情,这个对于类的测试也很有实用价值。

例如下面的ClassA是要访问的类 :

package reflecttest;

public class ClassA {
 private String id;
 public ClassA(String id){
  this.id = id;
 }
 public String getId() {
  return id;
 }
 private void setId(String id) {
  this.id = id;
 }
  
}

下面为实现访问的简单例子:

package reflecttest;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

public class ReflectSample {

 public static void main(String[] args) {
  try {
   //要被加载的类名,可以通过配置文件指定
   String className = “reflecttest.ClassA”;
   
   //根据类名加载类
   Class c = Class.forName(className);

   //设置构造器参数
   Class[] paramTypes = new Class[1];
   paramTypes[0] = String.class;
   
   //生成构造器
   Constructor cs = c.getConstructor(paramTypes);
   
   //设置构造器参数值
   Object[] paramValue = new Object[1];
   paramValue[0] = “testID”;
   
   //构造类实例
   Object obj = cs.newInstance(paramValue);
   
   //调用类中的方法: getId()
   String methodNameA = “getId”;
   Method mA = c.getMethod(methodNameA, null);
   System.out.println(mA.invoke(obj, null));
   
   //调用类中的方法: setId()
   String methodNameB = “setId”;
   Method mB = c.getMethod(methodNameB, new Class[]{String.class});   
   mB.invoke(obj, new Object[]{“newId”});
   
   //查看修改后的结果
   System.out.println(mA.invoke(obj, null));
   
   
  } catch (Exception ex) {
   ex.printStackTrace();
  }
 }

}

原地址:
http://blog.csdn.net/zzyy00/archive/2006/09/03/1172321.aspx

使用反射(reflection)的简单例子
滚动到顶部