mar*_*her 2 groovy constructor
给定具有属性和构造函数的对象,我希望将构造函数参数复制到属性中,然后在构造函数中执行一些额外的工作.
import groovy.transform.TupleConstructor
@TupleConstructor
class Thing{
def one
def two
public Thing(one, two){
doSomething()
}
def doSomething(){
println "doing something with one : $one and two: $two"
}
}
println new Thing(1, 2).dump()
Run Code Online (Sandbox Code Playgroud)
如果我在构造函数中不执行任何其他操作,这将成功将args复制到属性,但如果我在构造函数中调用"doSomething()",则不会复制属性.
我正在寻找"Groovy"方法将args复制到属性.
正如tim_yates所提到的,如果你定义了另一个构造函数,那么TupleConstructor AST转换将不会做任何事情(你可以责怪这行代码= P).如果需要在构造对象时运行其他代码,可以在静态工厂方法中添加它,并直接使用它而不是元组构造函数:
import groovy.transform.TupleConstructor
@TupleConstructor
class Thing {
def one
def two
def doSomething(){
println "doing something with one : $one and two: $two"
}
static create(...args) {
def thing = new Thing(*args)
thing.doSomething()
thing
}
}
println Thing.create(1, 2).dump()
Run Code Online (Sandbox Code Playgroud)
请注意,我使用变量参数静态方法接收任意数量的参数,然后使用这些参数调用元组构造函数(使用"spread"(*)运算符).
不幸的是,TupleConstructor AST转换似乎没有将元组构造函数添加为私有的选项,这在这种情况下很有用.