2011-11-25 17 views
0

我有一個GroovyBean,我想要初始化。基本上,我想在構造對象期間轉換其中一個輸入參數。在Java中,我會創建一個構造函數並在構造函數中進行轉換。如何初始化Groovybean?

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參考,只有在獲取someInt時纔會使用它。

有沒有更好的方式來初始化GroovyBean而不失去使用命名參數的能力?

+0

你可以爲groovybean定義一個構造器,你是否嘗試過類似的東西。 – erimerturk

回答

2

我把轉換代碼的二傳手:

class WordWrapper { 
    def String word 

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


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

在我看來,這是比使用@Lazy更具可讀性。

+0

謝謝,這將是一個更好的解決方案。 – Odinodin