首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jaxp内部类是如何工作的?

jaxp内部类是如何工作的?
EN

Stack Overflow用户
提问于 2014-09-05 18:41:18
回答 1查看 142关注 0票数 0

我有一个非常基本的怀疑。请帮助我理解150.html链接中的以下几行

JAXP1.3引用名中的解决方案是更改在实现中使用的Apache库的包名。这种更改使您可以在类路径中引用较新的Apache库,这样应用程序开发人员就可以使用它们的方式与使用Java平台上的任何其他添加项的方式相同。

如何用类路径中引用库中的同名类重写jre的内部实现类?注意:我假设他们只提供包装包来更改内部包名的名称,所以内部包名应该仍然存在。

请详细解释。

提前谢谢!阿南德

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-05 18:46:02

以前,JRE中包含的一些org.apache包是"as-is",具有完整的org.apache包名。

这意味着,如果我的一个类想使用,比如说,Xerces DomUtil,并且有一个

代码语言:javascript
复制
import org.apache.xerces.util.DOMUtil;

根类装入器会将这个类解析为JRE中Xerces的版本。

如果我想使用新版本或不同版本的Xerces,我不能将它包含在我的应用程序类路径中,因为类加载器系统将优先于JRE中打包的Xerces。

现在这种情况已经改变了。他们拿走了org.apache包裹,把它们换成了com.sun.org.apache...internal.

因此,如果我想直接使用与JRE打包的Xerces,我可以导入:

代码语言:javascript
复制
import com.sun.org.apache.xerces.internal.util.DOMUtil;

(Eclipse将导致错误,告诉我们不要使用com.sun中的包。但是类仍然存在,如果我们愿意,我们可以更改访问限制)

这个版本被所有的JRE类使用,比如JAXP。

这让我可以在我的类路径中放一个更新的版本(如果Xerces ),并从我的应用程序中使用它,而不干扰JRE版本。

通过简单地重命名包,它们被重新打包了。这意味着将其从例如文件夹中移动。

代码语言:javascript
复制
org/apache/xerces/util

到文件夹

代码语言:javascript
复制
com/sun/org/apache/xerces/internal/util

在某个JRE家伙的硬盘驱动器上,然后在.java文件中更改

代码语言:javascript
复制
package org.apache.xerces.util;

代码语言:javascript
复制
package com.sun.org.apache.xerces.internal.util;

因此,从JVM的角度来看,它们是完全不同的类。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25692037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档