2012-03-05 56 views
1

我想模擬使用groovy映射強制的地圖。 我已經嘗試了代碼波紋管的各種變體,但結果始終爲空。如何在groovy中使用映射強制來模擬java.util.Map?

Map<String, String> map = [get: {String k -> "echo"}] as Map<String, String> 

println map.get("a") 

如果我使用map = {"echo"} as Map<String, String>它的作品。

關於如何製作第一個版本的任何想法?

感謝

回答

2

用做直脅迫這樣的問題是,重新定義getMap已經是一個Map並有在Groovy source威逼說,如果你想要做的是強迫的東西檢查如Map轉換爲Map,那麼只需正常投射,而不是試圖根據需要爲接口創建代理。

爲了解決這個問題,你可以讓你的模擬對象不同的類型Map,像Expando,那麼它會強制到您的接口類型:

Map<String, String> map = new Expando([get: {String k -> "echo"}]) as Map<String, String> 
assert map.get('a') == 'echo' 
+0

好了,所以上述工程的代碼,但不原因我認爲應該。由於我所說的原因,「Map」作爲「Map」不起作用,但我必須弄清楚上述代碼的工作機制。 – 2012-03-06 00:10:05

+0

還沒有找到使這項工作的相關源代碼路徑,但有一篇關於使用Expando進行模擬的文章可能證明是有用的:http://docs.codehaus.org/display/GROOVY/Developer+Testing+using+Maps +和+ expandos將代替+ + +嘲弄的 – 2012-03-06 00:12:31

相關問題