[英]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.