首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >clojure:使用变量args调用java类的静态方法

clojure:使用变量args调用java类的静态方法
EN

Stack Overflow用户
提问于 2012-04-24 04:56:55
回答 2查看 672关注 0票数 1

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

代码语言:javascript
复制
[org.imgscalr/imgscalr-lib "4.2"]

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

代码语言:javascript
复制
(import 'org.imgscalr.Scalr)
(def image (*acquire BufferedImage instance*))
(Scalr/resize image 200)

这给了我这个错误:

代码语言:javascript
复制
No matching method: resize

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

代码语言:javascript
复制
(import 'java.awt.image.BufferedImageOp)
(Scalr/resize image 200 (into-array BufferedImageOp []))

但这失败了,因为

代码语言:javascript
复制
No message.
[Thrown class java.lang.ClassCastException]

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-24 05:13:18

您可能没有像预期的那样获取图像。这对我很有效……

代码语言:javascript
复制
*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> 
票数 1
EN

Stack Overflow用户

发布于 2012-04-24 05:10:01

into-array调用看起来没问题,但是找到的方法签名接受一个java.lang.Integer,在Clojure中,默认情况下你的200是一个java.lang.Long。

如何强制转换为int类型:

代码语言:javascript
复制
(Scalr/resize image (int 200) (into-array BufferedImageOp []))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10288187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档