gpt4 book ai didi

clojure - 将构造函数添加到 deftype 创建的类

转载 作者:行者123 更新时间:2023-12-04 02:21:43 25 4
gpt4 key购买 nike

出于与 Java 的互操作性的目的,我需要一个具有执行初始化的空构造函数的类。
这个类的对象需要有类似于可变java字段的东西(即对象代表游戏的后端,需要保持游戏状态)。

deftype 做了我想做的所有事情,除了提供一个空构造函数(因为我正在创建一个带有字段的类)。

我不需要这些字段是公开可读的,所以我可以想到 4 个解决方案:

使用 gen 类;如果可以避免,我不想这样做。
以某种方式在 deftype 知识之外对私有(private)成员变量进行编码;我被告知这是不可能的。
编写一个修改过的 deftype,它也创建一个空构造函数;坦率地说,我不太了解clojure。
获取由 deftype 创建的类并以某种方式向其添加新的构造函数。

最后,我需要一个 Java 类,因为我将把它交给 Java 代码,Java 代码将从该类中创建一个新对象。

除了使用 gen-class 之外,我建议的任何解决方案(或我没有想到的任何解决方案)是否可行?

最佳答案

如果您的 Java 互操作要求同时是具体的和不可动摇的,那么在适当的情况下编写一些 Java 绝对不会感到羞耻。您可以编写一个带有单个静态工厂方法的 Java 类,该方法返回 deftype 的实例。类,并执行您需要的任何初始化/设置。

或者,您可以在 Clojure 中编写一个空工厂函数,并整天从 Java 中直接调用它。

无论如何,deftype也不是 defrecord旨在成为(或将永远成为)功能齐全的互操作设施。 gen-class当然是最接近的,这就是为什么它被推荐。

关于clojure - 将构造函数添加到 deftype 创建的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6515162/

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