目前,TEMJVM为经过提示的局部变量发出检查代码。这不符合clojure.org的说明,clojure.org表示标签不会得到强制执行,而是用于反射消除,而不是Java样式的静态类型。
此问题在加载clojure.core/ns-publics时表现出来,它使用带有^clojure.lang Namespace提示参数,但按照Clojure的所述提示行为,期望接受java.lang.Object域。
修复方法是采用Clojure的checkcast样式,即局部变量不必比Object类型更精确地提示,函数参数也是如此。只有交互站点实际上应该发出checkcast。
这种行为可能会有人认为是愚蠢的,但是它可以防止TEMJVM自行托管,所以就这样了。