簡體   English   中英

幫助擺脫重復的代碼?

[英]help get rid of duplicated code?

我創建了一個saxparser對象和一個POJO對象中的Java讀取的xml,該對象可根據調用者指定的內容處理不同類型的xml文件

這個POJO獲得一個xml值,該值代表聯系人姓名和ID的列表,而另一個xml文件/值代表一個聯系人的實際詳細信息,例如電話號碼,地址等。

我的問題更多有關如何從以下代碼中刪除重復的代碼:

public static List<ContactName> extractContactList(String xml, int type) {

    mXMLdata = new StringReader(xml);
SAXParserFactory factory = SAXParserFactory.newInstance();
            SAXParser sp = factory.newSAXParser();
            XMLReader xr = sp.getXMLReader();



            if(type == XML_MODE_PARSE_CONTACT_DESC){
                mContactDescHandler = new ContactDescXmlHandler();
                xr.setContentHandler(mContactDescHandler);
                xr.parse(new InputSource(mXMLdata));
                return mContactDescHandler.getContactDesc();
                return null;

            } else if(type == XML_MODE_PARSE_CONTACT_LIST){
                mContactListHandler = new ContactListXmlHandler();
                xr.setContentHandler(mContactListHandler);
                xr.parse(new InputSource(mXMLdata));
                return mContactListHandler.getContactNameList();
            }

如您所見,我正在使用兩個不同的POJO,它們擴展了DefaultHandler ,它們都使用XMLReader進行setContentHandler和解析。

它們是java中返回通用List<>()對象的一種方式,因為這兩個處理程序返回了不同的列表pojo,還是最好還是將其完全分開或用不同的方法將兩者分開?

xr.setContentHandler(mContactDescHandler); xr.parse(new InputSource(mXMLdata)); 我絕對可以寫一次,但是我認為主要的問題是返回類型。

提前歡呼

我認為您的代碼很好; 您正在處理未類型化的XML數據流,並正在從中創建不同的類型,因此,預期不會出現多態的switch / if語句。 由於不同類型確實需要單獨處理,因此此代碼非常合適。 只有將這兩種類型更改為具有更通用的父類(如Kelsey Rider建議),您才能使代碼更加簡潔。

如果這不是我的代碼中經常出現的問題,那么我暫時不會嘗試將其概括化。

清理您的代碼,以便ContactDescXmlHandler和ContactListXmlHandler都實現一個公共接口或從一個公共祖先繼承。 該接口/祖先應該具有諸如getContacts()之類的成員函數。 然后,為Desc和List類重新定義getContacts()函數,以執行getContactDesc()或getContactNameList()的工作。 然后,您的代碼將整理為:

(ancestor/interface) mHandler;
switch(type)
{
case XML_MODE_PARSE_CONTACT_DESC: mHandler = new ContactDescXmlHandler(); break;
case XML_MODE_PARSE_CONTACT_LIST: mHandler = new ContactListXmlHandler(); break;
default: return null;
}
xr.setContentHandler(mHandler);
xr.parse(new InputSource(mXMLdata));
return mHandler.getContacts();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM