Clojure deftype:如何约束字段类型?

Fre*_*rik 10 java clojure clojure-java-interop

我正在尝试编写一个可以在Java中使用的Clojure库,而用户不知道它是用Clojure编写的.为此,我需要我的字段有适当的类型:

我喜欢我可以这样做:

(deftype Point [^double x ^double y])
Run Code Online (Sandbox Code Playgroud)

这会为x/y生成一个具有适当类型的类.但是,这似乎只适用于原语,而不适用于类:

(deftype Foo [^String bar])
Run Code Online (Sandbox Code Playgroud)

生成一个:

public final Object bar;
Run Code Online (Sandbox Code Playgroud)

我期待的地方:

public final String bar;
Run Code Online (Sandbox Code Playgroud)

有没有办法约束字段类型?在deftype/ 之外还有其他选择defrecord吗?

Joo*_*aat 12

来自http://clojure.org/datatypes on deftypedefrecord:

字段可以具有类型提示,并且可以是原始的

请注意,目前非基本类型的类型提示 不会用于约束字段类型和构造函数arg,但将用于优化其在类方法中的使用

计划限制字段类型和构造函数arg

(我的重点)


Ada*_*der 0

也许尝试这样做:(deftype Point [#^Integer x #^Integer y])