本帖最后由 仉钰 于 2013-3-25 13:49 编辑
一 利用反射创建非数组对象有2个方法
1 如果提供了无参构造函数 可以使用 Class类中的 newInstance() 方法 创建对象
2 如果没有无参的构造函数的话 就只能使用 Constructor 类来创建对象了 假如
Class XXX {
public XXX(String s, Integer y)
{}
}
Class<?> classType = XXX.getClass();
Constructor<?> constructor = classType.getConstructor(String.class,int.class);
Object obj = constructor.newInstance(new Object[]{"hello",10});// 最后调用 Constructor中的 newInstance() 方法来创建对象
二 对于数组对象 来说
1 首先要明确数组中存放的数据类型 比如创建一个String 数组
Class<?> classType = String.class;
2 创建一维数组
Object array = Array.newInstance(classType,10);
同样可以使用反射创建多维数组 使用另外一个重载函数 Array.newInstance(Class<?>componentType,int... dimensions)
具体使用 可以参考java文档
三 方法的调用
使用 Method 中的 invoke(Object obj, Object... args)
其中 obj 是在哪个对象上调用方法
比如
Class XXX {
public XXX(String s, Integer y) {}
public int add( int x,int y )
{
return x+y;
}
}
例如反射调用add方法如下
//使用反射基本上第一步都是要得到 Class对象
Class<?> classType = XXX.getClass();
//得到add 对应的Method对象 第一个参数是方法的名称 第二个参数 是方法的参数类型 之所以有这个参数 是因为方法重载 仅仅依靠方法名是不能唯一确认某个方法的
Method addMethod = classType.getMethod("add",new Object[]{int.class,int.class})
//首先创建一个对象 表明在该对象上调用add 方法
XXX xxx = (XXX) (classType.getConstructor(String.class,int.class).newInstance());
Object result = addMethod.invoke(xxx,new Object[]{4,5});
利用反射调用方法的基本操作就完成了 还有更深入的操作 参考 文档 上面的代码中有一个错误 你可以找下 |