需求是我要做一个javabean转为xml格式的方法,现在我通过传递放有javabean的list数组,
在services中循环处理,通过反射把javabean的class得到,然后getDeclaredFieldsfor(Object bean : list) {
String root = bean.getClass().getSimpleName();
sb.append("<" + root.toUpperCase() + ">\n");
Field[] fields = bean.getClass().getDeclaredFields();
for (Field field : fields) {
try {


field.setAccessible(true);
if(showlist.contains(field.getName().toUpperCase())) {
System.out.println(field.getName() + ">>>>>" + field.get(bean));
if("SERIALVERSIONUID".equals(field.getName().toUpperCase())) {

sb.append("<ID>" + field.get(bean) + "</ID>\n");
}else {
sb.append("<" + field.getName().toUpperCase() + ">" + field.get(bean) + "</"
+ field.getName().toUpperCase() + ">\n");
}
}


} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
sb.append("</" + root.toUpperCase() + ">\n");
}
我具体遇到的问题是在sb.append("<ID>" + field.get(bean) + "</ID>\n");这行,当我get(bean)的时候,获取到的是 3178596402696236227这个值,也就是下面这个变量:
private static final long serialVersionUID = 3178596402696236227L;
但是实际我是想取到存放在id中得string字符串,我使用了debug调试,当我走到最里面的if语句条件时,发现在bean中存在的id的值才是我想要的值,请问我该如何获取到,请对反射机制熟练地人帮解决下,100分感谢

解决方案 »

  1.   

    public Object get(Object obj)
               throws IllegalArgumentException,
                      IllegalAccessException返回指定对象上此 Field 表示的字段的值。如果该值是一个基本类型值,则自动将其包装在一个对象中。 
    基础字段的值是按以下方式获得的: 如果基础字段是一个静态字段,则忽略 obj 变量;它可能为 null。 否则,基础字段是一个实例字段。如果指定的 obj 变量为 null,则该方法将抛出一个 NullPointerException。如果指定对象不是声明基础字段的类或接口的实例,则该方法将抛出一个 IllegalArgumentException。 如果此 Field 对象强制实施 Java 语言访问控制,并且基础字段是不可访问的,则该方法将抛出一个 IllegalAccessException。如果基础字段是静态的,并且声明该字段的类尚未初始化,则初始化这个类。 否则,从基础实例字段或静态字段中检索该值。如果该字段是一个基本类型字段,则在返回前将该值包装在一个对象中,否则照原样返回。 如果字段隐藏在 obj 的类型中,则根据前面的规则获得字段的值。 
    参数:
    obj - 从中提取所表示字段的值的对象 
    返回:
    对象 obj 中的所表示字段的值;在返回之前,基值包装在一个适当的对象中 
      

  2.   

    A.java
    public class A implements java.io.Serializable {
    public static final long serialVersionUID = -5362330504532103641L;
    }
    TestA.java
     public class TestA {
    public static void main(String[] args) throws Exception {
    Class c = A.class;
    java.lang.reflect.Field f = c.getDeclaredField("serialVersionUID");
    long l = f.getLong(A.class.newInstance());
    System.out.println("serialVersionUID:" + l);
    }
    }
      

  3.   

    Long ll = l ;
    ll.toString(),不就转成 string了,xml 中的文本 都是string 啊