2015-01-12 2 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}" 

алиса будут напечатаны

+1

мог вы используете только геттер? 'String getLower() {name.toLowerCase()}'? – cfrick

+0

@cfrick Конечно я могу. Мне просто интересно, доступно ли это через модификатор конструктора – Volkman

ответ

1

я не уверен, что вы на самом деле после того, как здесь. если вам действительно нужна магия только для 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' 
    
Смежные вопросы