我创建了一个 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 建议的)时,您才能使代码更加简洁。
如果这不是我的代码中的返回问题,我什至暂时不会尝试概括它。
关于java - 帮助摆脱重复的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3907327/