【问题标题】:Calling a java method which expects a class as argument in clojure在 clojure 中调用一个期望类作为参数的 java 方法
【发布时间】:2014-03-04 15:29:40
【问题描述】:

我试图在 clojure 中调用一个 java 方法(https://code.google.com/p/metadata-extractor),它需要一个类作为参数。

Java:

metadata.getDirectory(GpsDirectory.class)

我的 Clojure 代码:

(.getDirectory metadata GpsDirectory)

会出现以下异常:

IllegalArgumentException Don't know how to create ISeq from: com.drew.metadata.exif.GpsDirectory  clojure.lang.RT.seqFrom (RT.java:505)

我已经通过命名空间导入了 java 库

(ns MyProject.exif
(:import [java.io File BufferedInputStream FileInputStream]
       [com.drew.imaging ImageMetadataReader]
       [com.drew.metadata.exif GpsDirectory]
       [com.drew.metadata Directory]))

有人知道如何在 clojure 中调用这些方法(期望一个类)吗?

【问题讨论】:

  • 你检查过例子here吗?

标签: java clojure interop metadata-extractor


【解决方案1】:

试试:

(.getDirectory metadata (class (GpsDirectory.)))

【讨论】:

  • 你是对的!但是(.getDirectory 元数据 GpsDirectory)也可以。错误出现在代码中的另一点。我试图将 GpsDirectory 的对象传递给映射 (clojuredocs.org/clojure_core/1.3.0/clojure.core/map),因此编译器不知道如何创建 com.drew.metadata.exif.GpsDirectory 的序列。 -.- 感谢您的快速回复!
  • 是的,我也有点惊讶,所以我回答调用构造函数(也许其他一些代码覆盖了类名符号)。无论如何,在你的情况下,我更喜欢调用普通的“(.getDirectory metadata GpsDirectory)”,这样你就可以避免一个漫无目的的实例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-17
  • 1970-01-01
  • 1970-01-01
  • 2010-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多