Groovy: есть ли конструктор, вызываемый после копирования параметров? - PullRequest
4 голосов
/ 07 июня 2011

У меня есть этот код в Groovy:

class Person {
    def age
    Person () {
        println age // null
    }
}

def p = new Person ([age: '29'])
println p.age // 29

Мне нужно прочитать значение возраста в конструкторе, но оно еще не установлено.

Как я могу это сделать?

Примечание. Я не хочу использовать метод init () и каждый раз вызывать его вручную, например

class Person {
    def age
    def init() {
        println age // now have 29
    }
}

def p = new Person ([age: '29'])
p.init()
println p.age // 29

Ссылка на GroovyConsole .

Спасибо!

1 Ответ

7 голосов
/ 07 июня 2011

Вы можете написать конструктор следующим образом:

class Person {
    def age

    Person(Map map) {
        for (entry in map) {
            this."${entry.key}" = entry.value
        }
        println age
    }
}

Если вы используете groovy 1.8, взгляните на аннотацию @TupleConstructor, которая автоматически создаст конструкторкак и выше, а также на основе списка.

import groovy.transform.TupleConstructor

@TupleConstructor
class Person {
    int age
}

p = new Person([age: 99])
assert p.age == 99
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...