Ale*_*x R 11 clojure java-interop
出于与Java的互操作性的目的,我需要一个具有执行初始化的nullary构造函数的类.这个类的对象需要有类似可变java字段的东西(即,对象代表游戏的后端,并且需要保持游戏状态).
deftype做我想做的一切,除了提供一个无效的构造函数(因为我正在创建一个带字段的类).
我不需要这些字段是公开可读的,所以我可以想到4个解决方案:
使用gen-class; 如果我能避免,我不想这样做.
以某种方式编码私有成员变量以外的deftype知识; 我被告知无法做到这一点.
编写一个修改过的deftype,它也创建了一个nullary构造函数; 坦率地说,我不太了解这种情况.
取deftype创建的类,并以某种方式添加一个新的构造函数.
最后,我需要一个Java类,因为我将把它交给Java代码,它将从类中创建一个新对象.
除了使用gen-class之外,我建议的任何解决方案(或任何我没有想过的解决方案)都可行吗?
如果您的 Java 互操作需求既具体又不可动摇,那么在适当的情况下编写少量 Java 绝对没有什么可耻的。您可以使用单个静态工厂方法编写一个 Java 类,该方法返回该类的实例deftype并执行您需要的任何初始化/设置。
或者,您可以在 Clojure 中编写一个空工厂函数,然后整天直接从 Java 调用它。
无论如何,它们都不deftype是defrecord(也不会是)功能齐全的互操作工具。 gen-class当然是最接近的,这就是推荐它的原因。