Если вы просто хотите добавить метод bye()
к единственному экземпляру g
класса Greet
, вам нужно сделать:
g.metaClass.bye = { println "Goodbye, $name" }
g.bye()
В противном случае, чтобы добавить bye()
ко всем экземплярам Greet
(с этого момента), вызовите
Greet.metaClass.bye = { println "Goodbye, $name" }
Но вам нужно сделать это, прежде чем создавать экземпляр Greet
класса
Вот страница метакласса для каждого экземпляра
А вот и общая страница MetaClasses
Также есть ошибка в вашем конструкторе. Вы пропускаете who
в передней части вашего [1..-1]
, и если конструктору передается String
длиной менее 2 символов, он выдаст исключение
Лучшая версия может быть:
Greet( String who ) {
name = who.inject( '' ) { String s, String c ->
s += s ? c.toLowerCase() : c.toUpperCase()
}
}
Как отмечено в комментариях,
Greet( String who ) {
name = who.capitalize()
}
это правильный путь