【发布时间】:2019-07-18 08:27:28
【问题描述】:
尝试与 https://github.com/googleapis/google-cloud-java/blob/master/google-cloud-clients/google-cloud-storage/src/main/java/com/google/cloud/storage/StorageImpl.java#L139 进行一些 java 互操作 - 带有字节数组的 create 方法。
我的repl中有:
user=> (->> s r/reflect :members
(filter #(instance? clojure.reflect.Method %))
(filter #(:public (:flags %)))
(filter #(= (str (:name %)) "create"))
(print-table [:name :flags :parameter-types]))
| :name | :flags | :parameter-types |
|--------+---------------------+------------------------------------------------------------------------------------------------------------|
| create | #{:varargs :public} | [com.google.cloud.storage.BlobInfo byte<> com.google.cloud.storage.Storage$BlobTargetOption<>] |
(还有其他的,但这似乎是最相关的。)
还有:
user=> s
#object[com.google.cloud.storage.StorageImpl 0x57fb59c8 "com.google.cloud.storage.StorageImpl@57fb59c8"]
user=> blob-info
#object[com.google.cloud.storage.BlobInfo$BuilderImpl 0x1e8ce729 "com.google.cloud.storage.BlobInfo$BuilderImpl@1e8ce729"]
user=> b
#whidbey/bin "SEVZIE1ZIEdVWQ==“
但是当我打电话给.create时,我得到:
user=> (.create s blob-info (bytes b))
java.lang.IllegalArgumentException: No matching method create found taking 2 args for class com.google.cloud.storage.StorageImpl
如果我尝试添加 nil 作为第三个参数,我会得到与 3 args 相同的错误。
我在这里遗漏了一些明显的东西吗?谢谢!
编辑:How to handle java variable length arguments in clojure? 非常相似,而且更通用(这很好)。这个问题最终是关于一个特定的create 函数签名的具体问题。
【问题讨论】:
-
你喜欢的函数没有使用两个参数,而是三个。你可以在 java 中只用两个 args 来调用它,因为编译器会小心。 JVM 总是接受第三个参数;该类型的数组,即使为空
标签: java clojure google-cloud-platform clojure-java-interop