【问题标题】:Reflection warning - Java methods error on Clojure/Leiningen反射警告 - Clojure/Leiningen 上的 Java 方法错误
【发布时间】:2019-10-18 06:21:39
【问题描述】:

我是编码新手。我的第一个语言是 Clojure。这是我关于 stackoverflow 的第一个问题。

我写了一个 Clj 代码,测试了 lein(Emacs/Cider) 上的所有函数,我想编译测试。但是 Java 方法返回了这个错误信息:

(在项目文件夹中的终端上):

aaron@debian:~/img-process$ lein check

Reflection warning, img_process/core.clj:25:30 - reference to field getWidth can't be resolved.

(以及getHeight、getRGB、setRGB、java.io.File、javax.imeageio.ImageIO、java.lang.String)

为什么 lein 看不到 Java 元素? 我该如何编译这个?

谢谢。

项目.clj https://github.com/harununal/clj-x-ray-coloring/blob/master/project.clj

核心 clj : https://github.com/harununal/clj-x-ray-coloring/tree/master/src/img_process

【问题讨论】:

    标签: clojure


    【解决方案1】:

    如果 Clojure 不能暗示 Java 对象的类型,它会依靠反射进行互操作,这要慢得多。如果你使用:

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

    然后您也会在 REPL 中看到这些警告。如果您键入提示您的方法,则 Clojure 可以查看类型并发出更好的代码。例如

    (defn get-img-coords
      [^BufferedImage img]
      (for [y (range (.getHeight img))
            x (range (.getWidth img))]
        [x y]))
    

    请注意,lein check 不是编译器 - 它是 lein 等价物,可能会检查这些警告和其他警告。

    【讨论】:

      猜你喜欢
      • 2011-06-06
      • 1970-01-01
      • 1970-01-01
      • 2013-12-30
      • 2022-12-24
      • 2021-05-22
      • 2011-07-22
      • 2017-04-22
      • 2023-03-24
      相关资源
      最近更新 更多