2 回答
TA贡献1773条经验 获得超3个赞
答案最终是(来自 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 []))))
不需要类型提示 - 只需要正确排列类型。
TA贡献1858条经验 获得超8个赞
我不确定(bytes b)语法是否正确(什么是#whidbey/bin???)。
也许试试
(byte-array [1 2 3])
或类似的。您也可以尝试对参数进行类型提示:
(.create s
blob-info
^"[B" (byte-array [1 2 3]) ; type-hinted param
)
更新
这是我认为您需要的类型提示的示例:
(let [byte-array-obj (byte-array [1 2 3])
sss (java.util.Arrays/toString ^"[B" byte-array-obj) ]
(spyxx byte-array-obj)
(spyx (type byte-array-obj))
(spyx (aget byte-array-obj 2))
(spyx sss))
结果:
byte-array-obj => <#[B #object["[B" 0x26071f95 "[B@26071f95"]>
(type byte-array-obj) => [B
(aget byte-array-obj 2) => 3
sss => "[1, 2, 3]"
请注意,Clojure 有一种简单的方法来键入提示,而无需求助于 java-native"[B"字符串语法:
(java.util.Arrays/toString ^"[B" byte-array-obj) ; type hint using a string
(java.util.Arrays/toString ^bytes byte-array-obj) ; Clojure "build-in" type hint
两者是等价的。
添加回答
举报