【问题标题】:Replace/override JRE classes (in Eclipse IDE)替换/覆盖 JRE 类(在 Eclipse IDE 中)
【发布时间】:2015-04-28 19:55:29
【问题描述】:

我有一个项目,它的构建路径上有另一个项目,其中有一个 java.lang 包,里面有一个修改过的 String 实现。不知何故,我曾经使用股票 OpenJDK 7 JRE 以简单的运行配置启动了这个项目,并加载了修改后的 String 类(我认为至少因为在代码中被强制转换为仅由修改后的 String 实现的接口)。但是最近我可能已经改变了一些东西(我不知道是什么)并且我得到一个运行时 ClassCastException 显然是因为加载了原始的 String 类。 我尝试在一个演示项目中自己替换 String 类,虽然当我启动应用程序时自动完成和转到声明返回了我的 String 类,但情况并非如此,并且加载了 stock String 并且我的应用程序无法运行。

问题是:如何从 JRE 替换(/覆盖)类(不使用自定义类加载器)?还有如何证明我的经验是合理的?

【问题讨论】:

  • 用您自己的自定义版本替换标准 JDK 类是一个可怕的想法,可能会破坏一切。请不要这样做。
  • String 是一个 final 类,不打算扩展。如果您想更改实现以提供其他内容,那么将其放在您自己的包中并单独保留 JDK 会是一个更好的主意。不过我同意 Jesper 的观点,批量更改标准类可能不是一个好主意。
  • 我知道这不是一个好主意,但我的项目涉及 Java 字节码的检测,最终会改变类。因此,即使不是全部 JRE 类,也不可避免地要更改一些。问题仍然存在:我怎样才能体验到我所描述的?

标签: java class jvm classloader


【解决方案1】:

如果您想overload JDK core classes,您可以使用-Xbootclasspath 选项。

在 Eclipse 下,您还可以在其各自的类路径选项卡中配置运行配置的(引导)类路径。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-08
    • 1970-01-01
    相关资源
    最近更新 更多