将参数复制到Groovy类中的属性的Groovy方法是什么?

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复制到属性.

epi*_*ian 6

正如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转换似乎没有将元组构造函数添加为私有的选项,这在这种情况下很有用.