类似spring xml,
从一个xml读取信息,得到对象,以及对象属性名称,以及属性值。
转换为对象,并从xml里得到的值为对象赋值
现在情况是从xml里得到的值为string类型,
field.set();
就是报错,string不能转换为某类型,
这种情况怎么弄呢,不可能每个类型都取出来判断吧
if(type.getSimpleName().equals("Integer"))
{
return Integer.parseInt(obj.toString());
}else if(type.getSimpleName().equals("Short"))
{
return Short.parseShort(obj.toString());
}else if(type.getSimpleName().equals("Float")){
return Float.parseFloat(obj.toString());
}
......................
------解决方案--------------------
这个你必需这样做,没有其它更好的办法,当然,你可以下载一个xstram的工具包来帮你完成转换过程。
------解决方案--------------------
内省拿到属性的类型之后
可以用beanutils框架的ConvertUtils.convert方法将你读到的值转换为属性的类型
------解决方案--------------------
public static void main(String[] args) {
Map<String, String> params = new HashMap<String, String>();
Object bean = new Object();
Class<?> clazz = bean.getClass();
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
try {
String fieldName = field.getName();
Class<?> type = field.getType();
String methodName = "set"
+ fieldName.substring(0, 1).toUpperCase()
+ fieldName.substring(1);
Method method = clazz.getMethod(methodName, type);
String typeName = type.getName();
if (typeName.startsWith("["))
continue;
Constructor<?> constructor = type.getConstructor(String.class);
String paramt = params.get(fieldName);
Object value = constructor.newInstance(paramt);
method.invoke(bean, value);
} catch (NoSuchMethodException e) {
} catch (SecurityException e) {
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
------解决方案--------------------
可以参考Spring配置bean方式,要求有setter方法的。这边有个例子:
package com.reflect.demo1;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class Demo1 {
public static void main(String[] args) throws ClassNotFoundException, IllegalArgumentException, SecurityException,
InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException,
NoSuchFieldException {
// 省略配置文件解析过程
// 得到类路径,加载类
Class<?> clazz = Class.forName("com.reflect.demo1.Pojo1");
// 对象实例化
Object bean = clazz.newInstance();
// 属性"id"配置了值101
// 属性首字母大写,前面加set,生成setter方法
String idSetter = "setId";
Class idType = clazz.getDeclaredField("id").getType();