java – 类型提示Clojure中的函数

前端之家收集整理的这篇文章主要介绍了java – 类型提示Clojure中的函数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图解决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

什么是最好的解决方法?这可以用类型提示来完成吗?

解决方法

这两个版本似乎有效:
user> (defn foo [^Integer x] (+ 3 x))
#'user/foo
user> (.equals (foo 2) (foo 2))
Reflection warning,NO_SOURCE_FILE:1 - call to equals can't be resolved.  ;'
true
user> (.equals ^Integer (foo 2) ^Integer (foo 2))
true
user> (defn ^Integer foo [^Integer x] (+ 3 x))
#'user/foo
user> (.equals (foo 2) (foo 2))
true

请注意,Clojure的类型提示在1.2版本中仍然有一定的局限性,所以这可能永远不会一样.还要注意,^ ^不赞成使用^.

猜你在找的Java相关文章