为了与 Java 实现互操作性,我需要一个具有执行初始化的空构造函数的类。
此类的对象需要具有类似于可变java字段的东西(即该对象代表游戏的后端,并且需要保持游戏状态)。
deftype 确实一切我想要做except提供一个无效构造函数(因为我正在创建一个带有字段的类)。
我不需要这些字段是公开可读的,所以我可以想到 4 种解决方案:
使用gen-class;如果可以避免的话我不想这样做。
以某种方式对 deftype 知识之外的私有成员变量进行编码;我被告知这是不可能的。
编写一个修改后的 deftype,它也会创建一个空构造函数;坦率地说,我对此不太了解 clojure。
采用 deftype 创建的类并以某种方式向其中添加一个新的构造函数。
最后,我需要一个 Java 类,因为我将把它交给 Java 代码,该代码将从该类创建一个新对象。
除了使用 gen-class 之外,我建议的任何解决方案(或任何我没有想到的)是否可行?
如果您的 Java 互操作需求既具体又不可动摇,那么在适当的情况下编写少量 Java 绝对没有什么可耻的。您可以编写一个带有单个静态工厂方法的 Java 类,该方法返回一个实例deftype
类并执行您需要的任何初始化/设置。
或者,您可以在 Clojure 中编写一个空工厂函数,然后整天直接从 Java 调用它。
无论如何,都不deftype
nor defrecord
旨在成为(或将成为)功能齐全的互操作设施。gen-class
当然是最接近的,这就是推荐它的原因。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)