一個可能的方法是操縱現有LinkedHashMap.asType()
方法接受ObjectMap
作爲參數:
def originalMethod = LinkedHashMap.getMetaClass().getMetaMethod("asType", Class)
LinkedHashMap.getMetaClass().asType = { Class clazz ->
if(clazz == ObjectMap) {
def map = new ObjectMap()
delegate.each { key, value -> map.put(key, value) }
map
}
else {
originalMethod.invoke(delegate, clazz)
}
}
那麼你可以這樣做:
def map = [a:1] as ObjectMap
另一種選擇是一種方法toObjectMap()
增加基地Map
metaClass像這樣:
Map.getMetaClass().toObjectMap = { ->
def map = new ObjectMap()
delegate.each { key, value -> map.put(key, value) }
map
}
然後,你可以這樣做:
def map2 = [a:2].toObjectMap()
或者,只寫一個實用的方法來映射轉換爲ObjectMaps ;-)
你能給你的意思的例子嗎? –
我認爲OP想從'[x:42]'而不是'LinkedHashMap'獲得一個ObjectMap(我的猜測是,這是不可能的)。 @MrPlow你至少可以用'with'來擺脫一些重複。 – cfrick
作爲ObjectMap的'[x:42]不起作用嗎? –