免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
使用反射簡(jiǎn)化繁瑣的對(duì)對(duì)象成員設(shè)值取值的過程
轉(zhuǎn)載請(qǐng)注明作者sitinspring及出處.

對(duì)對(duì)象字段設(shè)值取值是一個(gè)繁瑣的過程,尤其當(dāng)字段多時(shí)更加如此,也許大家都寫過如下代碼:
    public void savePersonalInfo(PersonalInfo info) {
        Element infoElm 
= root.addElement("personalinfo");
        
        
// 一個(gè)蘿卜一個(gè)坑
        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ù)含量.

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

例程如下,假設(shè)我們是對(duì)一個(gè)名為MemberInfo的對(duì)象進(jìn)行操作,它的代碼如下:
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)在有一個(gè)MemberPersistence類,負(fù)責(zé)將MemberInfo類實(shí)例存到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類實(shí)例存到XML文件及從XML文件中取出
 * 
 * 
@author: sitinspring(junglesong@gmail.com)
 * @date: 2008-1-3
 
*/
public class MemberPersistence {
    
// XML 文件名
    private final String xmlFile;

    
// XML 文檔對(duì)象
    private Document document;

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

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

        File file 
= new File(xmlFile);

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

    
/**
     * 從XML文件中提取所有Member節(jié)點(diǎn)的信息,作為鏈表返回
     * 
     * 
@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è)置每個(gè)成員變量的值
                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;
    }

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

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

            
// 取得每個(gè)成員變量的值
            for (Field field : fields) {
                
// 在member節(jié)點(diǎn)下添加屬性節(jié)點(diǎn)
                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();
        }
    }
}
最后測(cè)試代碼:
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è)值取值也變得輕巧起來,比原先一個(gè)蘿卜一個(gè)坑的方式要先進(jìn)多了.

代碼下載(請(qǐng)大家自行加入dom4j包):
http://www.blogjava.net/Files/sitinspring/MemberFieldSetgetValueSample20080103135538.rar
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
將數(shù)據(jù)庫(kù)表里的數(shù)據(jù)直接轉(zhuǎn)為XML文件
Java操作XML文件 dom4j 篇
post模擬
Dom4J解析xml文檔
DOM4J解析XML文檔、Document對(duì)象、節(jié)點(diǎn)對(duì)象節(jié)點(diǎn)對(duì)象屬性、將文檔寫入XML文件
dom4j追加新節(jié)點(diǎn)換行輸出
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服