Groovy- 地图:每次都需要新实例

Groovy- map : every time require new instance

我的要求是每次访问 MAP 中的值时都获得一个新实例。

MyObject {
    def type
}


def myMap = [
"key1" : new MyObject()
]

def obj1 =  myMap.get("key1")
def obj2 =  myMap.get("key1")

obj1obj2 可以是两个不同的实例吗? 如果 executed/accessed 并行,它将如何表现?

不知道你的用例是什么,但我想我有你问题的答案:

def myMap = [
  "key1" : new MyObject()
]

只是先实例化一个新对象,然后将这个对象存储在地图中。所以每次访问它,你得到的都是同一个对象。

要创建您所描述的行为,您需要向地图添加一些动态的东西 - 闭包!

def myMap = [
  "key2" : {-> new MyObject()}
]

但现在 myMap.get("key2") 仍然 returns 始终相同 - 闭包。但是如果你通过调用 myMap.get("key2")()(或简称 myMap.key2)来执行它,你每次都会得到一个不同的对象!

不幸的是,这是一个接近的结局。我希望用一个名为 getKey3 的键来做一个技巧 - 我希望 Groovy 在访问 key3 时会调用这个 "getter" 但事实似乎并非如此。

Groovy 中还有其他 "tricks" 可以帮助您实现目标(例如 MetaProgramming),但我想如果我们了解您的用例,会有更好的解决方案。