关于XML的pull解析的小发现

来源:互联网 发布:一元云购指定中奖源码 编辑:程序博客网 时间:2024/04/30 08:32

这个问题是我们组的冯越发现的,他的基础非常好,学习一些新知识的时候研究的很仔细

首先,用pull方法解析XML文件时要取得一个解析器的实例,如下:
XmlPullParser parser = XmlPullParserFactory.newInstance().newPullParser();

XmlPullParser只是个接口,返回的实际上是XmlPullParser的实现类KXmlParser的一个实例,这也就是面对对象中最常用的父类变量指向子类对象
在这种情况下,parser作为一个父类变量,只能调用父类定义方法,看不到子类自己定义的方法
但冯越看了XmlPullParser这个jar包的API文档和源码,发现XmlPullParser并没有定义setInput(InputStream arg0, String arg1)和.nextText()这两个方法,但是却可以用parser这个变量来调用这两个方法

这明显违背了前面说的面对对象原则,这是不可能的!

看着冯越坐立不安有些抓狂的样子,再听到他叨咕出那句“这简直颠覆了我的面对对象的XXX(记不准他原话了)”,不由得让我想起《三体》第一部(非常精彩的科幻小说,建议有时间的兄弟看看)里因为出现了颠覆量子物理理论基础现象而自杀的科学家,我也跟着翻看了XmlPullParser和KXmlParser这两个jar包的API文档和源码,一样没什么发现,最后还是请教了张老师才解决了这个疑问。

原来,XmlPullParser的jar包定义了的三个接口(或类)KXmlParser这个jar包里有一套完全相同的定义,只是多了那两个方法,而KXmlParser的源码和API里却没有这部分,难怪我们怎么查看源码也没什么发现。

这一点在导入了两个包后,可以在“打开类型”窗口中看到,如下图,两个包都有XmlPullParser这个接口

KXmlParser这个jar包里定义的XmlPullParser接口多了那两个方法,所以难怪可以用父类的变量直接调用了

也就是只要导入KXmlParser这一个jar包就可以使用pull解析XML,
---------------
后注:今天晚饭时和两个同组的兄弟说起这个问题,发现他们都知道了只导KXmlParser这一个包就可以,但他们是因为同时导入两个包出现setInput提示错误发现的,而我和冯越测试并没出这种情况。记得张老师课上代码时也没有。

原文地址:http://bbs.lampbrother.net/read-htm-tid-150081.html

阅读(18) | 评论(0) | 转发(0) |
0

上一篇:Eclipse快捷键 之二

下一篇:关于编程思想的认知

相关热门文章
  • 详细讲解 关于Linux静态库和动...
  • linux内核的一些预定义...
  • 蚊香不管用 合肥“捕蚊哥”土...
  • qpid service 的root引发的权...
  • 我们工作到底为了什么--HP大中...
  • 毕业五年(续)
  • 毕业五年
  • 职业生涯规划
  • 中国软件开发工程师之痛...
  • 闲置书处理!
  • 大家都是用什么来管理hadoop集...
  • 网站被人挂了吗,添加了些程序...
  • Nginx如何保证不走宕机的那个...
  • 大家谈谈MYSQL客户端和服务器...
  • 以下代码运行后为何会输出5?...
给主人留下些什么吧!~~
原创粉丝点击