我正在尝试编写一个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
?
2条答案
按热度按时间hfyxw5xn1#
或许可以这样做:
(deftype Point [#^Integer x #^Integer y])
v7pvogib2#
从http://clojure.org/datatypes 在
deftype
以及defrecord
:字段可以有类型提示,也可以是基元
请注意,当前非基元类型的类型提示将不用于约束字段类型或构造函数arg,而是用于优化其在类方法中的使用
计划约束字段类型和构造函数arg
(我的重点)