JAVA反射 根据不同的属性类型进行赋值 获取以字符串为参数的构造函数 - 全栈笔记

JAVA反射 根据不同的属性类型进行赋值 获取以字符串为参数的构造函数

任亦伟 JAVA, 默认分类 2014-12-06 58 次浏览 没有评论

直接上代码

01
02
//项目开始大量使用发射机制
03
 
04
//从客户系统获取联系人信息
05
String xmlStr = HttpUtil.doGet("http://xxxxxxx/api/listContact.action?clientid=1", null, "utf-8");
06
Document document = null;
07
List<Contact> contactList = new ArrayList<Contact>();
08
try {
09
  //通过dom4j解析xml字符串为dom文档
10
  document= DocumentHelper.parseText(xmlStr);
11
  //从document中解析Contact联系人
12
  Element rootElt = document.getRootElement();
13
  //如果联系人记录数大于0
14
  if(Integer.parseInt(rootElt.elementTextTrim("count"))>0){
15
    Element contactsElt = (Element) rootElt.elementIterator("contacts").next();
16
    Iterator<Element> iterator = contactsElt.elementIterator("contact");
17
    int i=0;
18
    while(iterator.hasNext()){
19
    Element contactElt = iterator.next();
20
    Field[] properties = Contact.class.getDeclaredFields();
21
    Contact contact = Contact.class.newInstance();
22
    for(Field property:properties){
23
      String pname = property.getName();
24
      property.setAccessible(true);
25
      PropertyDescriptor pd = new PropertyDescriptor(pname, Contact.class);
26
      Method writeMethod = pd.getWriteMethod();
27
      //获取属性的类型
28
      Class clazz=property.getType();
29
     //获取该类型以字符串为参的构造函数
30
     String pvalue = contactElt.elementTextTrim(pname);
31
     if(pvalue != null){
32
        Constructor constructor = clazz.getConstructor(String.class);
33
        writeMethod.invoke(contact,constructor.newInstance(pvalue));
34
     }
35
  }
36
  contactList.add(contact);
37
 
38
}
39
} catch (Exception e) {
40
  e.printStackTrace();
41
}
42

发表评论

回顶部