weixin_42360958 2010-09-13 16:49
浏览 245
已采纳

关于Java反射的问题

[code="java"]
List list = new ArrayList();
User user0 = new User();
user0.setUsername("ty");
user0.setAge(24);
user0.setTel("137***");
user0.setAddress("南京");
list.add(user0);

    User user1 = new User();
    user1.setUsername("tz");
    user1.setAge(21);
    user1.setTel("158***");
    user1.setAddress("南京");
    list.add(user1);
    String jsonArray = JSONHelper.getJSONByBeanList(list);
    System.out.println(jsonArray);

[/code]

[code="java"]
public static String getJSONByBeanList(List<?> list) {
try {
Class<?> clazz = list.get(0).getClass();
Field fields[] = clazz.getDeclaredFields();
for (int i = 0; i < list.size(); i++) {
for (int j = 0; j < fields.length; j++) {
Object objectCopy = clazz.getConstructor(new Class[] {}).newInstance(new Object[] {});
String fieldName = fields[j].getName();

String firstLetter = fieldName.substring(0, 1).toUpperCase(); // 获得和属性对应的getXXX()方法的名字
String getMethodName = "get" + firstLetter + fieldName.substring(1); // 获得和属性对应的setXXX()方法的名字

String setMethodName = "set" + firstLetter + fieldName.substring(1); // 获得和属性对应的getXXX()方法
Method getMethod = clazz.getMethod(getMethodName,new Class[] {}); // 获得和属性对应的setXXX()方法
Method setMethod = clazz.getMethod(setMethodName, new Class[] { fields[j].getType() }); // 调用原对象的getXXX()方法
Object value = getMethod.invoke(objectCopy, new Object[]{});
System.out.println(fieldName+" "+value);
}
}
} catch (JSONException e) {
throw new JSONException("");
}catch (SecurityException e) {
e.printStackTrace();
}catch (NoSuchMethodException e) {
e.printStackTrace();
}catch (IllegalArgumentException e) {
e.printStackTrace();
}catch (IllegalAccessException e) {
e.printStackTrace();
}catch (InvocationTargetException e) {
e.printStackTrace();
}catch (InstantiationException e) {
e.printStackTrace();
}
return "";
}
[/code]

现在的问题是,如果传一个单一的Bean那可以获得bean的名字和值,但是把多个Bean存入List,这时候我就 [color=red][size=xx-large]吐血了[/size][/color]

我的其主要目的就是为了转换成json,我没用org.json那些jar包。
请教一下兄弟能否告诉我这么搞,我很纠结,小弟万分感谢
非诚勿扰。。。。

  • 写回答

2条回答 默认 最新

  • weixin_42525443 2010-09-13 20:22
    关注

    不好意思,写错了
    [code="java"]
    for (int i = 0; i < list.size(); i++) {

    Class<?> clazz = list.get(i).getClass();

    Field fields[] = clazz.getDeclaredFields();

    Object objectCopy = clazz.getConstructor(new Class[] {}).newInstance(new Object[] {});

    for (int j = 0; j < fields.length; j++) {

    String fieldName = fields[j].getName();

    String firstLetter = fieldName.substring(0, 1).toUpperCase();
    // 获得和属性对应的getXXX()方法的名字

    String getMethodName = "get" + firstLetter + fieldName.substring(1);
    // 获得和属性对应的setXXX()方法的名字

    String setMethodName = "set" + firstLetter + fieldName.substring(1);
    // 获得和属性对应的getXXX()方法

    Method getMethod = clazz.getMethod(getMethodName,new Class[] {});
    // 获得和属性对应的setXXX()方法

    Method setMethod = clazz.getMethod(getMethodName, new Class[] { fields[j].getType() }); // 调用原对象的getXXX()方法 !!

    Object value = getMethod.invoke(list.get(i), new Object[]{});

    setMethod.invoke(objectCopy , new Object[]{value });//!!!!

    System.out.println(fieldName+" "+value);

    }

    }
    [/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥25 大学xml问答,会的请回复
  • ¥15 小贝360-4 配二个 华772S 设置WⅰFi5G 连接
  • ¥15 vs2022的QT报错,好像是缺少winextras
  • ¥15 怎么看 cst中一个面的功率分布图
  • ¥15 c语言数据结构求9999
  • ¥15 Fiddler无法对部分小程序抓包
  • ¥60 Python代码 ip首部检验和计算代码 版本协议 首部长度 源地址 目的地址 存活时间
  • ¥18 微机原理汇编的综合实验
  • ¥15 LD衰减图用R语言对其可视化
  • ¥15 Mermaid语法生成的svg在Axure无法编辑