gpt4 book ai didi

java - com.google.cloud.storage.StorageImpl 的 clojure java 互操作

转载 作者:行者123 更新时间:2023-11-30 01:54:48 25 4
gpt4 key购买 nike

尝试与 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 方法。

我的回复中有:

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 函数签名的具体问题。

最佳答案

答案最终是(来自 clojurians slack 上的 Seancorfield),blob-info 是一个 BuilderImpl 内部类,并且需要是一个实际的 BlobInfo 。有效的代码:

(defn get-storage []
(-> (StorageOptions/getDefaultInstance)
(.getService)))

(defn get-blob-info [bucket storage-key]
(let [content-type "text/plain"
blob-id (BlobId/of bucket storage-key)
builder (doto
(BlobInfo/newBuilder blob-id)
(.setContentType content-type))]

(.build builder)))

(defn upload-str [bucket storage-key str-to-store]
(let [storage (get-storage)
blob-info (get-blob-info bucket storage-key)
byte-arr (.getBytes str-to-store)]
(.create storage
blob-info
byte-arr
(into-array Storage$BlobTargetOption []))))

不需要类型提示 - 只需要正确排列类型即可。

关于java - com.google.cloud.storage.StorageImpl 的 clojure java 互操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54857655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com