通过点表示法访问Groovy 3.x中类映射对象中的成员引发异常
我正在使用Vert.x4.0.3和Groovy3.0.7版本->通过点表示法访问Groovy 3.x中类映射对象中的成员引发异常,groovy,vert.x,Groovy,Vert.x,我正在使用Vert.x4.0.3和Groovy3.0.7版本->Vertx4.0.3和Groovy。它有一个扩展模块,其中包含一个方法: public static Object getAt(JsonObject json, String key) { return json.getValue(key); } 现在,在我的代码中,我试图获得JsonObject的一个成员: json.getString( 'id' ) // works fine json[ 'id' ] //
Vertx4.0.3和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
我错过了什么
在Groovy 3中,getAt()
的“点表示法”是否以某种方式被“弃用”
更新:
事实上,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
字段或用于拦截对此类实例的属性访问的内容时才有效(propertyMissing(String)
、getProperty(String)
等)。默认情况下,getAt(JsonObject,String)
方法不会参与计算json.id
,事实并非如此。但另一方面,从来没有必要重写getAt
?JsonObject
没有getAt
,所以它被添加到了已删除的答案中,这是一个误读的问题。抱歉。哦,对了,我想他们是“地图式”的。我认为杰夫斯的回答说明了问题所在(IMHO不应该被删除)<代码>getAt仅在对象为贴图时使用。所以问题是:为什么它以前奏效了?@JeffScottBrown对你的答案做点什么,这样我就可以接受了