通过点表示法访问 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
.
我正在使用 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
.