通过动态密钥访问groovy map

pra*_*upd 2 groovy hashmap

我想要一个构造一个带有动态键的groovy map,如下所示,并希望通过动态键获取值.但是我无法访问它,它为同一个键返回null.

class AmazonPackage {
    public static String WEIGHT = "WEIGHT"
}

class PackageTests {

   @Test
   void "map should return value by dynamic key" () {
       def map = [ ("${AmazonPackage.WEIGHT}") : 100, "id": "package001"]

       assert map['id'] == "package001"

       //assert map[("${AmazonPackage.WEIGHT}")] == 100
       //assert map."${AmazonPackage.WEIGHT}" == 100

       assert 2 == map.keySet().size()
       assert map."WEIGHT" == 100 //fails
    }

    @Test
    void "map should return value by simple key" () {
        def map = ["w" : 100]
        assert map."w" == 100
    }

}
Run Code Online (Sandbox Code Playgroud)

我得到的失败是,

Assertion failed: 

assert map."WEIGHT" == 100
       |   |        |
       |   null     false
       [WEIGHT:100, id:package001]
Run Code Online (Sandbox Code Playgroud)

doe*_*eri 7

不幸的是,你存储的地图密钥是a GString,而不是a String.这意味着地图不会将这些键视为相等.

如果要使用字符串值访问映射,则应将密钥存储为字符串:

def map = [ ("${AmazonPackage.WEIGHT}".toString()) : 100, "id": "package001"]
assert map."WEIGHT" == 100
Run Code Online (Sandbox Code Playgroud)