Groovy中的拦截属性设置器

时间:2018-10-22 12:40:44

标签: groovy

如何在Groovy中拦截动态属性设置器?

这是我尝试过的:

def a = new Object ()
a.metaClass.setx = { newValue ->
   print "new value is ${newValue}"
}
a.x = 3

我希望上面的代码打印“新值是3”

2 个答案:

答案 0 :(得分:1)

示例中的setter方法应命名为setX,例如

def a = new Object ()
a.metaClass.setX = { newValue ->
   print "new value is ${newValue}"
}
a.x = 3

这是Java约定,用于定义setXgetX方法的模式-类属性名称部分以大写字母开头。这意味着如果您想拦截名为firstName的字段的setter方法,则Groovy编译器创建的setter方法称为setFirstName(name)

答案 1 :(得分:0)

Groovy仅在没有定义的实现时才创建综合访问器(setter方法)。

如果在对象中创建setX方法,则将执行您尝试执行的操作。从技术上讲,第一个答案是正确的,但反射是一种功能强大的工具,需要仔细处理,不应在不需要的地方使用它。