我正在尝试解决Clojure中的反射警告,这似乎是由于缺少对普通Java对象的函数返回值的类型推断.
演示此问题的简单示例代码:
(set! *warn-on-reflection* true)
(defn foo [#^Integer x] (+ 3 x))
(.equals (foo 2) (foo 2))
=> Reflection warning, NO_SOURCE_PATH:10 - call to equals can't be resolved.
true
Run Code Online (Sandbox Code Playgroud)
解决这个问题的最佳方法是什么?这可以用类型提示完成吗?
在"Programming Clojure"一书中(Halloway,S.,(2009).Program Clojure.Raleigh,NC:Pragmatic Bookshelf.)他使用语法显示了类型提示
(defn describe-class [#^Class c]
...)
Run Code Online (Sandbox Code Playgroud)
在Clojure网站上,类型提示显示没有#阅读器宏:
(defn len2 [^String x]
...)
Run Code Online (Sandbox Code Playgroud)
哪个是对的?