2015-01-12 51 views
0

捐贈類Groovy的覆蓋構造函數命名參數

class A { 
    def String name = '' 
    def String lower = '' 
} 

建設者命名參數可用於

new A(name: 'Alice', lower: 'alice') 

我不想指定較低的參數,因爲它總是等於name.toLowerCase( )

如何實現這個構造函數? 所以調用後:

def a = new A(name: 'Alice') 
println "${a.lower}" 

alice將被打印

+1

二傳手可能你只用一個吸氣劑? 'String getLower(){name.toLowerCase()}'? – cfrick

+0

@cfrick當然可以。對我來說,通過修改構造函數是可用的 – Volkman

回答

1

我不知道,你是什麼真的在這裏了。如果你真的只需要一些魔術,請告訴我們。但最常見的方式來解決這個問題,要麼是:

  1. 計算lower,當它需要

    String getLower() { name.toLowerCase() } 
    
  2. 覆蓋的name

    class A { 
        String name = '' 
        private String lower = '' 
    
        void setName(String name) { 
         this.name = name 
         this.lower = name?.toLowerCase() 
        } 
    
        String getLower() { lower } 
    
    } 
    
    def a = new A(name: 'Charlie') 
    assert a.lower == 'charlie'