2015-07-01 21 views
1

我試圖使用com.sun.mail.imap.IMAPSSLStore的id方法向IMAP服務器發送客戶端標識。問題是,它需要一個Map<String, String>作爲參數,因此呼叫將Clojure的PersistentArrayMap強制轉換爲Java的地圖<String,String>

(.id store (HashMap. {"foo" "bar"})) 

失敗IllegalArgumentException

我在做什麼錯?

+0

我看不出Clojure的PersistentArrayMap是如何相關的:你正在交出一個'java.util.HashMap',不是嗎?很明顯,對象然後是一個完美的'Map ',所以我期望你有一個不同的問題。 – schaueho

+0

@schaueho是對的,也許我回答得太快了。實際上,'(HashMap。{「foo」「bar」})'拋出'IllegalArgumentException'。你試過了嗎?(.id store {「foo」「bar」})'? – nberger

+0

@nberger'(HashMap。{「foo」「bar」})'本身不會拋出任何東西。它返回完全有效的HashMap,它似乎實現了Map接口。當然我試過'(.id store {「foo」「bar」})'無濟於事。 – lumrandir

回答

0

看到這個答案:https://stackoverflow.com/a/3770360/1389573

簡單地說:你需要定義在Java中指定的確切類型的接口,然後實現Clojure中的該接口。

+1

我不認爲這是真的需要在這裏,參見。在同一個討論中[由Stuart Sierra回答](http://stackoverflow.com/a/3689391/3098550)。 – schaueho

+0

我試過'(def r(reify ITypedMap(typedMap [this m] m)))'然後是'(.typedMap r {「foo」「bar」})''。它仍然返回'clojure.lang.PersistentArrayMap'。 – lumrandir

+0

請參閱您的問題的意見。你試過了嗎?(.id store {「foo」「bar」})'? – nberger

相關問題