Mixins не работают таким образом.Вы пытаетесь смешать метод для Map
с вашим MyClass
объектом.Миксин будет работать только в том случае, если MyClass
extended Map
.
Вместо этого вы хотите использовать ключевое слово use
, как обычно, и просто использовать свою категорию в качестве категории.Вам это может не понадобиться.Знаете ли вы, что по умолчанию вы можете конвертировать любую карту в любой GroovyBean без дополнительного кода?Просто используйте конструктор на основе карты, например:
@groovy.transform.Canonical // Groovy 1.8, just added for automatic toString method
class Response {
String result
String message
}
println new Response([result: 'OK', message: 'Success'])
println([result: 'bad', message: 'blah'] as Response)
Обратите внимание, что автоматическое преобразование карты работает в обоих направлениях.Это встроенная функция Groovy.
Конечно, если вам нужно что-то более сложное, чем просто присвоение свойств бина, это не поможет.
Примечание: я бы хотелдать вам ссылку, но сайт Groovy, кажется, не работает, и я не могу найти примеры кода.: - (
РЕДАКТИРОВАТЬ: Другое предложение
Вместо того, чтобы вообще использовать Категорию, почему бы вам не позволить самому компоненту обработать его:
@groovy.transform.Canonical
class Response {
String result
String message
int num
public void setNum(String num) {
this.num = Integer.parseInt(num)
}
}
def map = [result: 'OK', message: 'Success', num: '35' ]
println map as Response