如果您只想添加bye()
方法到单个实例g
班级的Greet
,你需要做:
g.metaClass.bye = { println "Goodbye, $name" }
g.bye()
否则,要添加bye()
到所有实例Greet
(从现在开始),请致电
Greet.metaClass.bye = { println "Goodbye, $name" }
但是您需要在创建实例之前执行此操作Greet
class
这是关于每个实例元类的页面 http://groovy-lang.org/metaprogramming.html#_per_instance_metaclass
这是一般元类的页面 http://groovy-lang.org/metaprogramming.html#_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()
}
是正确的方法