反射,为对象赋值 文本内容解析为对象,用严格的xml方式,或者Json方式都可以吧。你的文本对象内容是什么样子的? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这个你必需这样做,没有其它更好的办法,当然,你可以下载一个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(); } } } <?xml version="1.0" encoding="UTF-8"?><beans><bean id="test" class="com.test.testVO"><attr><value id="name">sara</value><value id="id">4</value><value id="score">95</value></attr></bean></beans>这种格式,通过反射可以转换为对象,主要是赋值出问题,说string不能cast to某类型,我就想问java有某个方法可以自动转换string为相应属性类型吗 恩,谢谢,知道有个xstream,可以转对象,主要想学习学习反射这块,谢谢 <?xml version="1.0" encoding="UTF-8"?><beans><bean id="test" class="com.test.testVO"><attr><value id="name">sara</value><value id="id">4</value><value id="score">95</value></attr></bean></beans>这种格式,通过反射可以转换为对象,主要是赋值出问题,说string不能cast to某类型,我就想问java有某个方法可以自动转换string为相应属性类型吗自动转换这个东西会害人的。比如95,你觉得他就一定是整型的么?为什么不是字符串呢?这个反射要根据你的id值对应的属性,来找该属性名在你类中对应的类型,然后根据对应值、类型,进行构建。 1.通过spring的xml加载可以自动加载成对应javabean。2.<?xml version="1.0" encoding="UTF-8"?><beans><bean id="test" class="com.test.testVO"><attr><value id="name" type="java.lang.String">sara</value><value id="id" type="java.lang.Long">4</value><value id="score"type="java.lang.Integer" >95</value></attr></bean></beans>通过配置type属性,知道参数的类型,可直接转,参照 #5. <?xml version="1.0" encoding="UTF-8"?><beans><bean id="test" class="com.test.testVO"><attr><value id="name">sara</value><value id="id">4</value><value id="score">95</value></attr></bean></beans>这种格式,通过反射可以转换为对象,主要是赋值出问题,说string不能cast to某类型,我就想问java有某个方法可以自动转换string为相应属性类型吗自动转换这个东西会害人的。比如95,你觉得他就一定是整型的么?为什么不是字符串呢?这个反射要根据你的id值对应的属性,来找该属性名在你类中对应的类型,然后根据对应值、类型,进行构建。那个,我只是举个例子,95不一定非得是数字,我只是想说,我从xml读取出来的是string类型的,我要为该对象赋值,可该对象属性类型不一定都是string类型的,所以想问有什么方法可以把string转为相应的类型,不然为对象赋值,会报错。。 <?xml version="1.0" encoding="UTF-8"?><beans><bean id="test" class="com.test.testVO"><attr><value id="name">sara</value><value id="id">4</value><value id="score">95</value></attr></bean></beans>这种格式,通过反射可以转换为对象,主要是赋值出问题,说string不能cast to某类型,我就想问java有某个方法可以自动转换string为相应属性类型吗自动转换这个东西会害人的。比如95,你觉得他就一定是整型的么?为什么不是字符串呢?这个反射要根据你的id值对应的属性,来找该属性名在你类中对应的类型,然后根据对应值、类型,进行构建。那个,我只是举个例子,95不一定非得是数字,我只是想说,我从xml读取出来的是string类型的,我要为该对象赋值,可该对象属性类型不一定都是string类型的,所以想问有什么方法可以把string转为相应的类型,不然为对象赋值,会报错。。可以参考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(); // 封装基本类型的String类型构造方法// 本质上就是new Integer(String)方法 Constructor idTypeCs = idType.getDeclaredConstructor(String.class); Method idSetMethod = clazz.getDeclaredMethod(idSetter, idType); idSetMethod.invoke(bean, idTypeCs.newInstance("101")); // 属性"name"配置了"张三" // 生成setter方法 String nameStter = "setName"; Class nameType = clazz.getDeclaredField("name").getType(); // 封装基本类型的String类型构造方法 Constructor nameTypeCs = nameType.getDeclaredConstructor(String.class); Method nameSetMethod = clazz.getDeclaredMethod(nameStter, nameType); nameSetMethod.invoke(bean, nameTypeCs.newInstance("张三")); // 验证 Pojo1 pojo = (Pojo1) bean; System.out.println(pojo.getId()); System.out.println(pojo.getName()); }}// 同一包下class Pojo1 { private Integer id; private String name; public int getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; }}不过只考虑了封装类型对象,想基本类型int等,如果实现,我只想到一个个的if/else了。。 Java FTP断点上传 hibernate 生成不了主键 怎么回事 怎样在tomcat部署web应用 请教 iReport 问题 如何将已经运行良好的JAVA程序转化成.EXE文件?急!!! 哥儿们救救我了,前面发了贴子没人理,再发一贴。Jbuilder中EJB控件的问题。 为什么同一个容器的不同jar文件里的EJB调用EJB就不能用local呢? 请问哪儿有Weblogic 7 或者Tomcat 4下载的?多谢了 使用FtpClient上传Spring MVC找不到该类 随机抽奖中将的算法,哪位大神可以提供吗 请教OSGI外部启动问题 Eclipse 工程发布到 tomcat 报错
可以用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();
}
} }
<?xml version="1.0" encoding="UTF-8"?>
<beans>
<bean id="test" class="com.test.testVO">
<attr>
<value id="name">sara</value>
<value id="id">4</value>
<value id="score">95</value>
</attr>
</bean>
</beans>这种格式,通过反射可以转换为对象,主要是赋值出问题,说string不能cast to
某类型,我就想问java有某个方法可以自动转换string为相应属性类型吗
恩,谢谢,知道有个xstream,可以转对象,主要想学习学习反射这块,谢谢
<?xml version="1.0" encoding="UTF-8"?>
<beans>
<bean id="test" class="com.test.testVO">
<attr>
<value id="name">sara</value>
<value id="id">4</value>
<value id="score">95</value>
</attr>
</bean>
</beans>这种格式,通过反射可以转换为对象,主要是赋值出问题,说string不能cast to
某类型,我就想问java有某个方法可以自动转换string为相应属性类型吗
自动转换这个东西会害人的。比如95,你觉得他就一定是整型的么?为什么不是字符串呢?
这个反射要根据你的id值对应的属性,来找该属性名在你类中对应的类型,然后根据对应值、类型,进行构建。
<beans>
<bean id="test" class="com.test.testVO">
<attr>
<value id="name" type="java.lang.String">sara</value>
<value id="id" type="java.lang.Long">4</value>
<value id="score"type="java.lang.Integer" >95</value>
</attr>
</bean>
</beans>通过配置type属性,知道参数的类型,可直接转,参照 #5.
<?xml version="1.0" encoding="UTF-8"?>
<beans>
<bean id="test" class="com.test.testVO">
<attr>
<value id="name">sara</value>
<value id="id">4</value>
<value id="score">95</value>
</attr>
</bean>
</beans>这种格式,通过反射可以转换为对象,主要是赋值出问题,说string不能cast to
某类型,我就想问java有某个方法可以自动转换string为相应属性类型吗
自动转换这个东西会害人的。比如95,你觉得他就一定是整型的么?为什么不是字符串呢?
这个反射要根据你的id值对应的属性,来找该属性名在你类中对应的类型,然后根据对应值、类型,进行构建。那个,我只是举个例子,95不一定非得是数字,我只是想说,我从xml读取出来的是string类型的,我要为该对象赋值,可该对象属性类型不一定都是string类型的,所以想问有什么方法可以把string转为相应的类型,不然为对象赋值,会报错。。
<?xml version="1.0" encoding="UTF-8"?>
<beans>
<bean id="test" class="com.test.testVO">
<attr>
<value id="name">sara</value>
<value id="id">4</value>
<value id="score">95</value>
</attr>
</bean>
</beans>这种格式,通过反射可以转换为对象,主要是赋值出问题,说string不能cast to
某类型,我就想问java有某个方法可以自动转换string为相应属性类型吗
自动转换这个东西会害人的。比如95,你觉得他就一定是整型的么?为什么不是字符串呢?
这个反射要根据你的id值对应的属性,来找该属性名在你类中对应的类型,然后根据对应值、类型,进行构建。那个,我只是举个例子,95不一定非得是数字,我只是想说,我从xml读取出来的是string类型的,我要为该对象赋值,可该对象属性类型不一定都是string类型的,所以想问有什么方法可以把string转为相应的类型,不然为对象赋值,会报错。。
可以参考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();
// 封装基本类型的String类型构造方法// 本质上就是new Integer(String)方法
Constructor idTypeCs = idType.getDeclaredConstructor(String.class);
Method idSetMethod = clazz.getDeclaredMethod(idSetter, idType);
idSetMethod.invoke(bean, idTypeCs.newInstance("101"));
// 属性"name"配置了"张三"
// 生成setter方法
String nameStter = "setName";
Class nameType = clazz.getDeclaredField("name").getType();
// 封装基本类型的String类型构造方法
Constructor nameTypeCs = nameType.getDeclaredConstructor(String.class);
Method nameSetMethod = clazz.getDeclaredMethod(nameStter, nameType);
nameSetMethod.invoke(bean, nameTypeCs.newInstance("张三")); // 验证
Pojo1 pojo = (Pojo1) bean;
System.out.println(pojo.getId());
System.out.println(pojo.getName());
}
}
// 同一包下
class Pojo1 {
private Integer id; private String name; public int getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}}
不过只考虑了封装类型对象,想基本类型int等,如果实现,我只想到一个个的if/else了。。