使用反射(reflection)的简单例子
2006-09-03 17:44
525 查看
运用反射访问类的私有方法是一件比较有趣的事情,这个对于类的测试也很有实用价值。
例如下面的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();
}
}
}
例如下面的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();
}
}
}
相关文章推荐
- .net中使用反射的简单例子
- .net中使用反射的简单例子
- .net中使用反射的简单例子
- .net中使用反射的简单例子
- .net中使用反射的简单例子
- .net中使用反射的简单例子
- js中dom使用简单例子
- 最简单的使用线程的例子
- 使用 CXF 做 webservice 简单例子
- java 使用 comet4j 主动向客户端推送信息 简单例子
- C#开发之反射的简单使用
- RecyclerView的使用——简单例子
- 使用 CXF 做 webservice 简单例子
- MongoDB与c#(二)简单例子 使用1.7版本驱动
- [Android]一个简单使用Handler做Timer的例子
- 使用 CXF 做 webservice 简单例子
- justep工具使用(配置和简单例子)
- struts拦截器的使用(简单例子)
- 使用DWR实现JS调用JAVA类的简单例子
- 一个简单的例子教会您使用javap