我試圖使用com.sun.mail.imap.IMAPSSLStore的id方法向IMAP服務器發送客戶端標識。問題是,它需要一個Map<String, String>
作爲參數,因此呼叫將Clojure的PersistentArrayMap強制轉換爲Java的地圖<String,String>
(.id store (HashMap. {"foo" "bar"}))
失敗IllegalArgumentException
。
我在做什麼錯?
我試圖使用com.sun.mail.imap.IMAPSSLStore的id方法向IMAP服務器發送客戶端標識。問題是,它需要一個Map<String, String>
作爲參數,因此呼叫將Clojure的PersistentArrayMap強制轉換爲Java的地圖<String,String>
(.id store (HashMap. {"foo" "bar"}))
失敗IllegalArgumentException
。
我在做什麼錯?
看到這個答案:https://stackoverflow.com/a/3770360/1389573
簡單地說:你需要定義在Java中指定的確切類型的接口,然後實現Clojure中的該接口。
我看不出Clojure的PersistentArrayMap是如何相關的:你正在交出一個'java.util.HashMap',不是嗎?很明顯,對象然後是一個完美的'Map',所以我期望你有一個不同的問題。 –
schaueho
@schaueho是對的,也許我回答得太快了。實際上,'(HashMap。{「foo」「bar」})'拋出'IllegalArgumentException'。你試過了嗎?(.id store {「foo」「bar」})'? – nberger
@nberger'(HashMap。{「foo」「bar」})'本身不會拋出任何東西。它返回完全有效的HashMap,它似乎實現了Map接口。當然我試過'(.id store {「foo」「bar」})'無濟於事。 – lumrandir