2015-01-12 52 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'