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

时间:2012-08-25 14:27:56

标签: java clojure clojure-java-interop

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

我喜欢我可以这样做:

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

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

(deftype Foo [^String bar])

生成一个:

public final Object bar;

我希望在哪里:

public final String bar;

有没有办法约束字段类型?还有deftype / defrecord以外的其他选项吗?

2 个答案:

答案 0 :(得分:12)

来自deftype上的http://clojure.org/datatypesdefrecord

  

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

     

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

     

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

(我的重点)

答案 1 :(得分:0)

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