通过点表示法访问 Groovy 3.x 中类似 Map 对象的成员会抛出异常

Access members in Map-like object in Groovy 3.x via dot notation throws Exception

我正在使用 Vert.x 4.0.3 和 Groovy 3.0.7 风格 -> vertx-lang-groovy。它有一个包含方法的扩展模块:

  public static Object getAt(JsonObject json, String key) {
    return json.getValue(key);
  }

现在,在我的代码中,我试图获得 JsonObject:

的成员
json.getString( 'id' ) // works fine
json[ 'id' ] // works fine
json.id // throws NoSuchMethodException

我错过了什么?

getAt() 的“点符号”是否在 Groovy 3 中以某种方式“弃用”了?

更新:

确实,getAt() 不足以表示点符号,而 getProperty() 是:

class A {
  String a = 'aaaaaaaaa'
  
  //Object getAt( String key ){ a }
   
  def getProperty(String name) { a }
}

def a = new A()

assert 'aaaaaaaaa' == a[ 'aa' ]
assert 'aaaaaaaaa' == a.aaaa
assert 'aaaaaaaaa' == a.a

json.id 仅在有 getId() 方法、id 字段或适当的地方拦截 属性 访问此 class(propertyMissing(String)getProperty(String) 等)。默认情况下,getAt(JsonObject, String) 方法不会参与评估 json.id.