Groovy: различия между версиями

Содержимое удалено Содержимое добавлено
Строка 527:
println catty.startDate
</syntaxhighlight>
Groovy добавляет к обычному классу конструктор принимающий один аргумент типа Map если не определен другой конструктор.
<syntaxhighlight lang="groovy">
class Man {
String name
int age
}
//Именованные параметры в конструкторе станут типом Map
def adam = new Man(name:'Adam', age:30)
assert adam.name == 'Adam'
 
class Woman {
String name
int age = 18
//Определяем свой собственный конструктор
Woman(int age, String name) {
this.name = name
this.age = age
}
}
//вызываем наш определенный конструктор, а с типом Map класс Woman уже не сможет работать
def eva = new Woman(19, 'Eva')
assert eva.age == 19
</syntaxhighlight>
С помощью аннотации @MapConstrutor мы можем внедрить добавить к классу конструктор с параметром Map:
<syntaxhighlight lang="groovy">
import groovy.transform.MapConstructor
 
@MapConstructor
class ManFinal {
final String name // AST трансформация поддерживает финальные поля.
final int age
}
def adamFinal = new ManFinal(name: 'Adam', age: 30)
assert adamFinal.age == 30
 
@MapConstructor
class WomanFinal {
// не финальные поля!
String name
int age
WomanFinal(int age, String name) {
this.name = name
this.age = age
}
}
//теперь наш класс может принимать параметр типа Map
def evaFinal = new WomanFinal(name: 'Eva', age: 19)
assert evaFinal.age == 19
//также можем вызвать и наш собственный конструктор
def diana = new WomanFinal(20, 'Diana')
assert diana.age == 20
</syntaxhighlight>
Интерфейсы: