我有一个我想初始化的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而不会失去使用命名参数的能力?
答案 0 :(得分:2)
我将转换代码放在setter中:
class WordWrapper {
def String word
void setReversed(String aReversedWord) {
word = aReversedWord.reverse()
}
}
assertEquals "cba", new WordWrappper(reversed: "abc").word
在我看来,这比使用@Lazy
更具可读性。