java – 类型提示Clojure中的函数

前端之家收集整理的这篇文章主要介绍了java – 类型提示Clojure中的函数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图解决Clojure中的反射警告,这似乎是由于缺少对普通 Java对象的函数返回值的类型推断.

演示该问题的简单示例代码

  1. (set! *warn-on-reflection* true)
  2.  
  3. (defn foo [#^Integer x] (+ 3 x))
  4.  
  5. (.equals (foo 2) (foo 2))
  6.  
  7. => Reflection warning,NO_SOURCE_PATH:10 - call to equals can't be resolved.
  8. true

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

解决方法

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

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

猜你在找的Java相关文章