gpt4 book ai didi

java - 热交换 Java 类

转载 作者:行者123 更新时间:2023-11-30 08:51:39 27 4
gpt4 key购买 nike

我一直在开发一个基于 Java 的小型在线游戏,虽然还没有完成,但我想在某个时候发布它。我不认为它很快就会完成,但是,所缺少的只是一些继续的故事部分。我考虑过通过互联网连接将更新修补到游戏中(就像大多数游戏那样)——但我想巧妙地使用它并使用某种形式的类热交换来修补更新而无需重新加载游戏。

最初,我认为 JRebel 可以用于此目的,但是,据我所知,从应用程序本身内部调用它并不容易。

我设想这个过程的方式是:

  1. 服务器告诉客户端有更新可用
  2. 客户端下载 ZIP/JAR/任何内容并解压
  3. 客户端加载修改正在运行的图像的“包类”(客户端具有专门构造的部分,旨在处理加载其他类并可能覆盖现有类。)
  4. “包类”处理内存中类表示的覆盖。

困扰我的部分是,如果我有一个对象,即

    //Something that's called when the app loads up
CustomClass drawClass = new CustomClass();
drawClass.setContext(Context.MAIN);
//...More calls that set up drawClass

我希望能够修改 CustomClass 并将其反射(reflect)在 CustomClass 的所有实例中。我对此抱有希望的唯一原因是我可以在每个类中构建一个“copyMe”东西,本质上是对其进行序列化 - 可以将其加载到新类中。

我可以这样做吗?如果是这样,如何?

最佳答案

我认为您可以使用 SPI 来解决一些必需的功能

在您的代码中,您可以构建一个自定义类加载器,它使用通过 ServiceLoader 找到的实现。 .

虽然我认为您需要找到一个可以在这些类上重用的自定义序列化。例如,您可以使用 gson并将感兴趣的字段序列化为 json。较新的实现可以反序列化,并且您获得了对版本控制等的支持。

关于java - 热交换 Java 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30456446/

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