java - 帮助摆脱重复的代码?

标签 java xml

我创建了一个 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/

相关文章:

java - 转换字符串值时对使用 SimpleDateFormat 感到困惑

java - 不带循环的数组列表

java - 为什么Java的Method类不是泛型的?

java - 如果值为空,则限制 XSLT 中的元素创建

java - XML 字符 <Unicode : 0xc> was found in the element content of the document

java - XOM 和规范 XML

java - 获取表数据并保存到数据库 - SQLEXception 一般错误

java - 为什么我们必须通过继承标签指定 gwt.xml 文件中要使用的模块?

php - 如何使用 PHP 解压 xml 文件

MYSQL - 将 XML 多个重复(复制)标签作为一个字符串加载