clojure-deftype:如何约束字段类型?

fsi0uk1n  于 2021-07-09  发布在  Java
关注(0)|答案(2)|浏览(285)

我正在尝试编写一个clojure库,它可以从java使用,而用户不知道它是用clojure编写的。为此,我需要字段具有适当的类型:
我喜欢这样做:

(deftype Point [^double x ^double y])

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

(deftype Foo [^String bar])

生成一个:

public final Object bar;

我期待的是:

public final String bar;

有没有办法约束字段类型?除此之外还有别的选择吗 deftype / defrecord ?

hfyxw5xn

hfyxw5xn1#

或许可以这样做: (deftype Point [#^Integer x #^Integer y])

v7pvogib

v7pvogib2#

从http://clojure.org/datatypes 在 deftype 以及 defrecord :
字段可以有类型提示,也可以是基元
请注意,当前非基元类型的类型提示将不用于约束字段类型或构造函数arg,而是用于优化其在类方法中的使用
计划约束字段类型和构造函数arg
(我的重点)

相关问题