Groovy覆盖构造函数命名参数

时间:2015-01-12 09:07:15

标签: 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 个答案:

答案 0 :(得分: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'