现在再总结一下最近使用的反射机制:
一.反射使用:根据函数名称查找对应的函数并执行
1.调用的函数的传入参数为空,例子如下:
//获取需要调用的方法所在的类的实例
Object object = Class.forName("com.cnpc.services."+className).newInstance();
// 返回方法名为functionName的一个 Method 对象,后面跟的是该方法参数
Method method = object.getClass().getMethod(functionName,null);
method.invoke(object,null);
2.调用的函数的传入参数为一个List<T>类型,例子如下:
List<Object> provideBeanList = CommonJSONListOperation(content, provideClass);
// 返回方法名为functionName的一个 Method 对象,后面跟的是该方法参数
Method method = object.getClass().getMethod(functionName,
new Class[]{List.class});
// 执行该方法
result = JSONTransfer.getJsonArrStrFromList(method.invoke(object,
provideBeanList));
二反射使用:根据一个对象,遍历该对象的各个属性,并找到对应的属性赋值,下边以Date类型为里,遍历对象中的属性,如果属性中含有Date类型,则判断,如果该Date类型的属性为null,则new一个赋值,否则不做操作:
Field[] fields = obj.getClass().getDeclaredFields();
for(Field f:fields)
{
if(f.getType().toString().equals("class java.util.Date"))
{
String dateName = f.getName();
Object o;
String functionNameGet = "get"+toUpperrCaseInitial(dateName);
String functionNameSet = "set"+toUpperrCaseInitial(dateName);
Method m = obj.getClass().getMethod(functionNameGet,null);
if(m.invoke(obj, null)==null)
{
Method m_set = obj.getClass().getMethod(functionNameSet, new Class[]{java.util.Date.class});
m_set.invoke(obj,new Object[]{new java.util.Date()});
}
}
}
这里是通过get,set方法实现的读取对应属性的值和设置对应属性的值,不知道还有没更简便的方法。