Ответ 1
Если вы просто хотите добавить метод bye()
к единственному экземпляру g
класса Greet
, вам нужно сделать:
g.metaClass.bye = { println "Goodbye, $name" }
g.bye()
В противном случае, чтобы добавить bye()
ко всем экземплярам Greet
(с этого момента), вызовите
Greet.metaClass.bye = { println "Goodbye, $name" }
Но вам нужно сделать это, прежде чем создавать экземпляр класса Greet
Вот страница метаданных для каждого экземпляра
И вот страница на MetaClasses вообще
Кроме того, есть ошибка в вашем конструкторе. Вам не хватает who
от infront вашего [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()
}
является правильным способом