如何初始化Groovybean?

时间:2011-11-25 11:20:24

标签: groovy

我有一个我想初始化的GroovyBean。基本上,我想在构造对象期间转换其中一个输入参数。在Java中,我将创建一个构造函数并在构造函数中进行转换。

class JavaBean {

    int someInt;

    public JavaBean(SomeObject transformMe) {
        someInt = transform(transformMe) 

    }

    private int transform(SomeObject transformMe() {
        // Do some transformation
    }

}

这是一个人为的例子,但我们假设转变是非常重要的。

我目前在groovy中的解决方案如下:

class GroovyBean {
    SomeObject transformMe
    @Lazy int someInt = transform(transformMe)

    def transform(SomeObject transformMe() {
        // Do some transformation
    }
}

要使用bean,我会这样做:

def bean = new GroovyBean(transformMe: anObjectToBeTransformed)
println bean.someInt

我想避免创建构造函数,因为我想保留命名参数构造。我真的不需要在GroovyBean中保留transformMe-reference,只有在获取someInt时才会使用它。

有没有更好的方法来初始化GroovyBean而不会失去使用命名参数的能力?

1 个答案:

答案 0 :(得分:2)

我将转换代码放在setter中:

class WordWrapper {
    def String word

    void setReversed(String aReversedWord) {
        word = aReversedWord.reverse()
    }
}


assertEquals "cba", new WordWrappper(reversed: "abc").word

在我看来,这比使用@Lazy更具可读性。