当进行元数据评估时,例如在def的情况下,原始类型别名不会工作。
在这个例子中,char被解释为函数char,而不是类型别名。这是因为clojure.lang.Compiler$DefExpr$Parser.parse在符号上评估元数据。
(def ^char x \space) (String/valueOf x) => CompilerException java.lang.IllegalArgumentException: 无法解析类名:clojure.core$char@7b82f7d1
相反,您必须将其写成
(def ^Character/TYPE x \space)
但是,当使用内联原始类型提示时,它们可以正常工作
(def x \space) (String/valueOf ^char x)
原始类型别名应该得到一致的对待。
谷歌显示这似乎是一个众所周知的问题,但我尚未找到与之相关的Jira问题。