如何在Groovy中拦截动态属性设置器?
这是我尝试过的:
def a = new Object ()
a.metaClass.setx = { newValue ->
print "new value is ${newValue}"
}
a.x = 3
我希望上面的代码打印“新值是3”
答案 0 :(得分:1)
示例中的setter方法应命名为setX
,例如
def a = new Object ()
a.metaClass.setX = { newValue ->
print "new value is ${newValue}"
}
a.x = 3
这是Java约定,用于定义setX
和getX
方法的模式-类属性名称部分以大写字母开头。这意味着如果您想拦截名为firstName
的字段的setter方法,则Groovy编译器创建的setter方法称为setFirstName(name)
。
答案 1 :(得分:0)
Groovy仅在没有定义的实现时才创建综合访问器(setter方法)。
如果在对象中创建setX方法,则将执行您尝试执行的操作。从技术上讲,第一个答案是正确的,但反射是一种功能强大的工具,需要仔细处理,不应在不需要的地方使用它。