文本内容解析为对象,用严格的xml方式,或者Json方式都可以吧。
你的文本对象内容是什么样子的?

解决方案 »

  1.   

    这个你必需这样做,没有其它更好的办法,当然,你可以下载一个xstram的工具包来帮你完成转换过程。
      

  2.   

    内省拿到属性的类型之后
    可以用beanutils框架的ConvertUtils.convert方法将你读到的值转换为属性的类型
      

  3.   


    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();
    }
    } }
      

  4.   


    <?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为相应属性类型吗
      

  5.   


    恩,谢谢,知道有个xstream,可以转对象,主要想学习学习反射这块,谢谢
      

  6.   


    <?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值对应的属性,来找该属性名在你类中对应的类型,然后根据对应值、类型,进行构建。
      

  7.   

    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.
      

  8.   


    <?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转为相应的类型,不然为对象赋值,会报错。。
      

  9.   


    <?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了。。