Groovy 重写构造函数命名参数



Giving 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}"

爱丽丝将被打印

我不确定,你在这里真正追求的是什么。 如果您真的只需要CTOR的魔法,请告诉我们。 但解决此问题的最常见方法是:

  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'
    

相关内容

最新更新