Groovy 覆盖构造函数命名参数

Groovy override constructor named parameters

给予class

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 将被打印出来

我不确定,你真正想要的是什么。如果您真的只需要 ctor 的一些魔法,请告诉我们。但最常见的解决方法是:

  1. 计算lower,需要时

    String getLower() { name.toLowerCase() }
    
  2. 覆盖 name

    的 setter
    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'