gpt4 book ai didi

java - 重写 Java 中的类

转载 作者:行者123 更新时间:2023-11-30 04:16:57 26 4
gpt4 key购买 nike

我可以使用 ClassLoader 的 DefinePackage 覆盖 jar 内的某些包吗?

例如,应用程序当前包含 abc.jar 中的“javax.xml.bind”。如果我调用 ClassLoader.definePackage(def.jar),其中 def.jar 包含 javax.xml.bind 的另一个版本,我可以将整个应用程序的类路径替换为指向 def.jar 的类路径吗?谢谢。

最佳答案

不,您绝对不能使用ClassLoader.definePackage来“覆盖”jar 内的某些包。

如果我理解正确的话,你想让你的 JVM 从 def.jar 加载 javax.xml.bind 下的任何类,而所有其他类则从 abc.jar 加载。在这种情况下,您可以(按照我个人的偏好顺序):

1) 在 CLASSPATH 中将 def.jar 放在 abc.jar 之前。这要求 def.jar 中不存在您要从 abc.jar 加载的类。

2) 解压缩 def.jar、abc.jar 或两者,并删除任何冲突的类,因此哪个 jar 在 CLASSPATH 中排在第一位实际上并不重要。然后重新压缩它们。或者您可以只在一个 jar 上执行此操作,然后将其放在另一个 jar 之前。

3) 使用可配置的类加载器(抱歉,据我所知没有公共(public)领域的类加载器;如果您找到了,请告诉我)。对于操作系统项目来说,这可能是一个有趣的话题,除了几个具有类似(但更广泛)目标的举措已经在进行中,其中一些是该语言的核心。

4)为此目的创建一个类加载器,可能会扩展默认类加载器。

关于java - 重写 Java 中的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18138823/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com