【问题标题】:clojure: calling a static method of a java class with variable argsclojure:使用变量 args 调用 java 类的静态方法
【发布时间】:2012-04-23 20:56:54
【问题描述】:

我正在尝试使用来自clojure 的Scalr java 图像大小调整库:

[org.imgscalr/imgscalr-lib "4.2"]

当我导入它并尝试使用它时,它会失败,因为每个方法需要的参数数量可变:

(import 'org.imgscalr.Scalr)
(def image (*acquire BufferedImage instance*))
(Scalr/resize image 200)

这给了我这个错误:

No matching method: resize

这是因为(据我所知)resize 将可变数量的 BufferedImageOps 作为其最后一个参数。所以,我尝试为这些传入一个 java 数组:

(import 'java.awt.image.BufferedImageOp)
(Scalr/resize image 200 (into-array BufferedImageOp []))

但这失败了

No message.
[Thrown class java.lang.ClassCastException]

我在这里做错了什么?谢谢!

【问题讨论】:

    标签: java image clojure


    【解决方案1】:

    您可能没有按预期获取图像。 例如这对我有用....

    *clojure-version*
    {:major 1, :minor 3, :incremental 0, :qualifier nil}
    user> (import 'java.awt.image.BufferedImageOp)
    java.awt.image.BufferedImageOp
    user> (import 'java.awt.image.BufferedImage)
    java.awt.image.BufferedImage
    user> (Scalr/resize (BufferedImage. 10 10 BufferedImage/TYPE_INT_ARGB) 200 (into-array BufferedImageOp []))
    #<BufferedImage BufferedImage@ccfe446: type = 2 DirectColorModel: rmask=ff0000 gmask=ff00 bmask=ff amask=ff000000 IntegerInterleavedRaster: width = 200 height = 200 #Bands = 4 xOff = 0 yOff = 0 dataOffset[0] 0>
    user> 
    

    【讨论】:

    • 谢谢!该图像正在地图中返回,我不得不去(图像:图像)。我的错。
    • 没问题。您应该注意,对于地图,(:keyword map) 是惯用的,而不是 (map :keyword)。在这里讨论:stackoverflow.com/questions/7034803/…
    【解决方案2】:

    into-array 调用看起来不错,但找到的方法签名 here 采用 java.lang.Integer,在 Clojure 中,您的 200 默认为 java.lang.Long。

    如何转换为 int:

    (Scalr/resize image (int 200) (into-array BufferedImageOp []))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-10
      • 1970-01-01
      • 2017-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多