乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      使用反射簡化繁瑣的對對象成員設(shè)值取值的過程

       WindySky 2008-09-28
      轉(zhuǎn)載請注明作者sitinspring及出處.

      對對象字段設(shè)值取值是一個繁瑣的過程,尤其當字段多時更加如此,也許大家都寫過如下代碼:
          public void savePersonalInfo(PersonalInfo info) {
              Element infoElm 
      = root.addElement("personalinfo");
              
              
      // 一個蘿卜一個坑
              Element nameElm = infoElm.addElement("name");
              nameElm.setText(info.getName());

              Element sexElm 
      = infoElm.addElement("sex");
              sexElm.setText(info.getSex());

              Element mobileElm 
      = infoElm.addElement("mobile");
              mobileElm.setText(info.getMobile());

              Element phoneElm 
      = infoElm.addElement("phone");
              phoneElm.setText(info.getPhone());

              Element addressElm 
      = infoElm.addElement("address");
              addressElm.setText(info.getAddress());

              Element emailElm 
      = infoElm.addElement("email");
              emailElm.setText(info.getEmail());

              Element titleElm 
      = infoElm.addElement("title");
              titleElm.setText(info.getTitle());

              Element birthdayElm 
      = infoElm.addElement("birthday");
              birthdayElm.setText(info.getBirthday());

              Element homepageElm 
      = infoElm.addElement("homepage");
              homepageElm.setText(info.getHomepage());

              Element qqElm 
      = infoElm.addElement("qq");
              qqElm.setText(info.getQq());

              Element msnElm 
      = infoElm.addElement("msn");
              msnElm.setText(info.getMsn());

      }

      這是取值過程,設(shè)值過程還要把上面繁瑣的過程重復(fù)一遍,工作顯得瑣碎而沒有技術(shù)含量.

      在反射的幫助下,我們可以有效的簡化這個繁瑣的過程,看代碼之前我們先補充一點有關(guān)類字段的反射API:
      ●Field[] getDeclaredFields():返回已加載類聲明的所有成員變量的Field對象數(shù)組,不包括從父類繼承的成員變量.
      ●Field getDeclaredField(String name):返回已加載類聲明的所有成員變量的Field對象,不包括從父類繼承的成員變量,參數(shù)name指定成員變量的名稱.
      ●Field[] getFields():返回已加載類聲明的所有public型的成員變量的Field對象數(shù)組,包括從父類繼承的成員變量
      ●Field getField(String name):返回已加載類聲明的所有成員變量的Field對象,包括從父類繼承的成員變量,參數(shù)name指定成員變量的名稱.

      例程如下,假設(shè)我們是對一個名為MemberInfo的對象進行操作,它的代碼如下:
      package com.sitinspring;

      public class MemberInfo{
          
      private String name;
          
      private String title;
          
      private String address;
          
          
      public MemberInfo(){
          }
          
          
      public MemberInfo(String name,String title,String address){
              
      this.name=name;
              
      this.title=title;
              
      this.address=address;
          }
          
          
      public String toString(){
              
      return "Name="+name+" Title="+title+" Address="+address;
          }

          
      public String getAddress() {
              
      return address;
          }

          
      public void setAddress(String address) {
              
      this.address = address;
          }

          
      public String getName() {
              
      return name;
          }

          
      public void setName(String name) {
              
      this.name = name;
          }

          
      public String getTitle() {
              
      return title;
          }

          
      public void setTitle(String title) {
              
      this.title = title;
          }
      }

      現(xiàn)在有一個MemberPersistence類,負責(zé)將MemberInfo類實例存到XML文件及從XML文件中取出,注意看設(shè)值取值的過程:
      package com.sitinspring;

      import java.io.File;
      import java.io.FileWriter;
      import java.lang.reflect.Field;
      import java.util.ArrayList;
      import java.util.Iterator;
      import java.util.List;

      import org.dom4j.Document;
      import org.dom4j.DocumentHelper;
      import org.dom4j.Element;
      import org.dom4j.io.OutputFormat;
      import org.dom4j.io.SAXReader;
      import org.dom4j.io.XMLWriter;

      /**
       * 用于將MemberInfo類實例存到XML文件及從XML文件中取出
       * 
       * 
      @author: sitinspring(junglesong@gmail.com)
       * @date: 2008-1-3
       
      */
      public class MemberPersistence {
          
      // XML 文件名
          private final String xmlFile;

          
      // XML 文檔對象
          private Document document;

          
      // XML 文檔根節(jié)點
          private Element root;

          
      /**
           * 構(gòu)造函數(shù),其中實例化文檔對象和根節(jié)點
           * 
      @param xmlFile
           
      */
          
      public MemberPersistence(String xmlFile) {
              
      this.xmlFile = xmlFile;

              File file 
      = new File(xmlFile);

              
      try {
                  
      // 判斷文件的存在以增強程序的健壯性
                  if (file.exists()) {
                      
      // 文件存在,直接從文件讀取文檔對象
                      SAXReader reader = new SAXReader();
                      document 
      = reader.read(file);
                      root 
      = document.getRootElement();
                  } 
      else {
                      
      // 文件不存在,創(chuàng)建文檔對象
                      document = DocumentHelper.createDocument();
                      root 
      = document.addElement("companies");// 創(chuàng)建根節(jié)點
                  }
              } 
      catch (Exception ex) {
                  ex.printStackTrace();
              }
          }

          
      /**
           * 從XML文件中提取所有Member節(jié)點的信息,作為鏈表返回
           * 
           * 
      @return
           
      */
          
      public List<MemberInfo> loadFromXml() {
              List
      <MemberInfo> retval = new ArrayList<MemberInfo>();

              
      try {
                  List nodes 
      = root.elements("member");

                  
      for (Iterator it = nodes.iterator(); it.hasNext();) {
                      Element memberElm 
      = (Element) it.next();

                      MemberInfo member 
      = new MemberInfo();

                      
      // 取得MemberInfo類的所有定義的成員變量,注意DeclaredFields不包括繼承下來的成員變量
                      Field[] fields = member.getClass().getDeclaredFields();

                      
      // 設(shè)置每個成員變量的值
                      for (Field field : fields) {
                          String fieldText 
      = memberElm.elementText(field.getName());
                          
      // 必須設(shè)置為true才可以取得成員變量的值,否則field.set(member, fieldText)一句要拋出java.lang.IllegalAccessException異常
                          field.setAccessible(true);
                          field.set(member, fieldText);
                      }

                      retval.add(member);
                  }

                  
      return retval;
              } 
      catch (Exception ex) {
                  ex.printStackTrace();
              }

              
      return null;
          }

          
      /**
           * 將一個Member對象寫到XML文件中
           * 
           * 
      @param member
           
      */
          
      public void writeToXml(MemberInfo member) {
              
      try {
                  
      // 在根節(jié)點下增加一個member節(jié)點
                  Element memberElm = root.addElement("member");

                  
      // 取得MemberInfo類的所有定義的成員變量,注意DeclaredFields不包括繼承下來的成員變量
                  Field[] fields = member.getClass().getDeclaredFields();

                  
      // 取得每個成員變量的值
                  for (Field field : fields) {
                      
      // 在member節(jié)點下添加屬性節(jié)點
                      Element fieldElm = memberElm.addElement(field.getName());
                      
      // 必須設(shè)置為true才可以取得成員變量的值,否則field.get(member)一句要拋出java.lang.IllegalAccessException異常
                      field.setAccessible(true);
                      fieldElm.setText((String) field.get(member));
                  }

                  OutputFormat format 
      = OutputFormat.createPrettyPrint();
                  format.setEncoding(
      "GBK"); // 指定XML編碼
                  XMLWriter writer = new XMLWriter(new FileWriter(xmlFile), format);

                  writer.write(document);
                  writer.close();
              } 
      catch (Exception ex) {
                  ex.printStackTrace();
              }
          }
      }
      最后測試代碼:
      package com.sitinspring;

      import java.util.List;

      public class Main{
          
      public static void main(String[] args){        
              MemberPersistence persistence
      =new MemberPersistence("member.xml");
              
              
      // 1.寫入過程
              MemberInfo andy=new MemberInfo("andy","SSE","Street A No 123");
              MemberInfo bill
      =new MemberInfo("Bill","PM","Street B No 456");    
              persistence.writeToXml(andy);
              persistence.writeToXml(bill);
              
              
      // 2.讀出過程
              List<MemberInfo> members=persistence.loadFromXml();
              
      for(MemberInfo member:members){
                  System.out.println(member);
              }
          }
      }
      生成和讀出的XML文件如下:
      <?xml version="1.0" encoding="GBK"?>

      <companies>
        
      <member>
          
      <name>andy</name>
          
      <title>SSE</title>
          
      <address>Street A No 123</address>
        
      </member>
        
      <member>
          
      <name>Bill</name>
          
      <title>PM</title>
          
      <address>Street B No 456</address>
        
      </member>
      </companies>

      看,結(jié)果是我們想要的,設(shè)值取值也變得輕巧起來,比原先一個蘿卜一個坑的方式要先進多了.

      代碼下載(請大家自行加入dom4j包):
      http://www./Files/sitinspring/MemberFieldSetgetValueSample20080103135538.rar

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多