gpt4 book ai didi

java - 如何在第三方类中为 java.util.Random 提供特定种子?

转载 作者:搜寻专家 更新时间:2023-10-31 19:51:26 24 4
gpt4 key购买 nike

我有一个 Java 程序可以加载第三方类文件(我没有编写的类)并执行它们。这些类通常使用 java.util.Random,它在每次实例化时默认生成随机起始种子值。出于可重现性的原因,我想每次都为这些类提供相同的起始种子,仅根据我的判断进行更改。

以下是一些显而易见的解决方案,以及它们为何不起作用:

  1. 在第三方类文件中使用不同的随机类。这里的问题是我只加载类文件,不能修改源。

  2. 使用自定义类加载器加载我们自己的 Random 类,而不是 JVM 的版本。这种方法行不通,因为 Java 不允许类加载器覆盖 java 包中的类。

  3. 将 rt.jar 的 java.util.Random 实现换成我们自己的,或者将文件放入 JVM 的受信任位置。这些方法需要应用程序的用户在他们的机器上安装 JVM,这并不好。

  4. 将自定义 java.util.Random 类添加到引导类路径。虽然这在技术上可行,但对于这个特定的应用程序来说,这是不切实际的,因为这个应用程序旨在让最终用户从 IDE 运行。我想让用户方便地运行应用程序,这意味着强制他们设置他们的 bootclasspath 是一件痛苦的事情。我无法将其隐藏在脚本中,因为它旨在从像 Eclipse 这样的 IDE 中运行(以便于调试。)

那我该怎么做呢?

最佳答案

按照以下说明,您的选项 2 实际上可行。

您将需要(如 anjab 所说)更改 Bootstrap 类路径。

在程序的命令行中,您需要添加以下内容:

java -Xbootclasspath/p:C:\你的\random_impl.jar 你的程序

假设您使用的是 Windown 机器或任何操作系统中与此相关的路径。

该选项在加载 rt.jar 之前添加 jar 文件中的类。因此,您的 Random 将在 rt.jar Random 类之前加载。

通过键入显示用法:

java -X

它显示了 JVM 具有的所有 X(tra) 特性。它可能不可用 在其他 VM 实现(例如 JRockit 或其他)上,但它存在于 Sun JVM 上。

-Xbootclasspath/p: 在bootstrap类路径前面加上

我在一个应用程序中使用了这种方法,其中默认的 ORB 类应该替换为其他 ORB 实现。 ORB 类是 Java 核心的一部分,从来没有任何问题。

祝你好运。

关于java - 如何在第三方类中为 java.util.Random 提供特定种子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/106623/

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