我有一个 Java 程序,它加载第三方类文件(我没有编写的类)并执行它们。这些类经常使用java.util.Random
,默认情况下,每次实例化时都会生成随机的起始种子值。出于可重复性的原因,我想每次都为这些类提供相同的起始种子,仅由我自行决定更改它。
以下是一些明显的解决方案,以及为什么它们不起作用:
在第三方类文件中使用不同的 Random 类。这里的问题是我只加载类文件,不能修改源。
使用自定义类加载器来加载我们自己的 Random 类,而不是 JVM 的版本。这种方法不起作用,因为 Java 不允许类加载器覆盖
java
包中的类。将 rt.jar 的
java.util.Random
实现替换为我们自己的,或者将文件放入 JVM 的受信任位置。这些方法要求应用程序的用户在他们的机器上安装 JVM,这并不好。将自定义
java.util.Random
类添加到引导类路径。虽然这在技术上可行,但对于这个特定的应用程序来说,这是不切实际的,因为这个应用程序是供最终用户从 IDE 运行的。我想让用户方便地运行应用程序,这意味着强迫他们设置引导类路径是一件痛苦的事情。我无法将其隐藏在脚本中,因为它旨在从 Eclipse 之类的 IDE 中运行(以便于调试。)
那么我该怎么做呢?