当前位置: 首页 > 知识库问答 >
问题:

反射警告-Clojure/Leiningen上的Java方法错误

龙智
2023-03-14

我不懂编码。我的第一个语言是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元素?我如何编译这个?

非常感谢。

项目cljhttps://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

共有1个答案

陈松
2023-03-14

如果Clojure不能暗示Java对象的类型,那么它会依赖反射来实现互操作,这要慢得多。如果您使用:

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

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

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

请注意,lein check并不是一个编译器——它可能是lein等价于一个轻过梁,用于检查这些警告和其他警告。

 类似资料:
  • 问题内容: 是否可以使用leiningen在项目中与Clojure一起轻松管理和编译本机Java类? 我的工作水平很低(使用netty nio),并且认为某些管道类实际上在构造代码和性能方面都更容易作为原始Java处理。 问题答案: 在Leiningen教程中有以下声明 对于包含某些Java代码的项目,可以将project.clj中的:java-source- path键设置为包含Java文件的目

  • 如果能帮助我重写一些使用反射的Java代码,以便在Java10上删除编译器中的警告,我将不胜感激: 这就是所讨论的Java方法: 这是GitHub上的问题代码:https://github.com/librepdf/openpdf/blob/master/openpdf/src/main/java/com/lowagie/text/pdf/mappedrandomaccessfile.java#l

  • 我在Eclipse(版本2019-06)中运行一个项目,它在我的java计算机上运行得很好--“OpenJDK 1.8.0_222” 然而,当我尝试tor在Eclipse(版本2021-3)上的另一台计算机上用java运行该项目时--“OpenJDK版本”1.8.0_292“,它不起作用! 我得到以下错误: 警告:发生非法反射访问操作警告:com.google.gson.internal.bind

  • 问题内容: 我已经安装了Java 和成功。所有进程运行良好 但是,每当我尝试执行任何命令(如收到此警告)时, 请帮助解决此问题。这是我的〜/ .bashrc文件配置 问题答案: 您不能对这些警告采取任何措施,这与拼图项目和更强的封装能力有关。 基本上有一个称为的类,它是称为“模块”的一部分。该模块“定义”了它输出的内容(其他人可以从中使用什么)以及向谁输出。这也用普通的英语表示这不是供公众使用的-

  • 对于一个类,我需要编写一些JVM代码,我希望使用Clojure。我让它与软件堆栈的底部一起工作,但我无法使它在位于顶部和底部的GUI层之间工作。我的主要问题是让JavaGUI识别我的Clojure文件。我想使用Leiningen实现这一点,但Java编译解决方案似乎没有考虑到这种互操作。这里的答案似乎正是我所需要的。我不明白该把代码放在哪里等等(只是不够详细)。有人有什么建议吗? 我试着制作一个插

  • 如何为非法反射访问警告引发异常?例如,考虑以下代码: 此代码将以下警告输出到 System.err: Boolean.TRUE是一个如此简单的值,以至于我真的不需要RefltionToStringBuilder。但是更复杂的类型(例如HashMap)打印相同的警告。我选择Boolean.TRUE是为了简化这个例子。 当我搜索此警告消息时,我发现了将其报告给包维护者,避免警告或完全禁用它的建议(JD