关于XML的pull解析的小发现

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

首先,用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

<script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/buttonLite.js#style=-1&uuid=&pophcol=3&lang=zh"></script> <script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/bshareC0.js"></script>
阅读(18) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值