如何在我的clojure源中删除这个反射警告,它有一个gen-class?

时间:2011-09-17 13:51:43

标签: clojure

 (ns scratch.fastflip
   (:gen-class
    :extends java.util.Random
    :implements clojure.lang.IFn))

 (defn -invoke [^java.util.Random this]
   (.next this 1))

加载文件我收到警告:

 ;scratch.coin=> Reflection warning, /home/user/scratch/src/scratch/fastflip.clj:8 - call to next can't be resolved.
 #'scratch.fastflip/-invoke

注意我想通过消除反射来消除警告,而不是通过将警告机制设置为false。

1 个答案:

答案 0 :(得分:2)

如果您使用的是1.3,这可能是因为next采用的是int,而不是long,1是int。但你确定next是你想要的吗?如果您正在进行硬币翻转,我会使用nextInt(2),因为next看起来像实现内部。

编辑:这里的语法可用于执行您想要的操作而无需反射警告。

(ns test-genclass.core
  (:gen-class
   :extends java.util.Random
   :implements [clojure.lang.IFn]
   :exposes-methods {next inner}))

(set! *warn-on-reflection* true)

(defn -invoke [^test_genclass.core this]
  (.inner this 1))

(defn -main [& args]
  ((test_genclass.core.)))