【发布时间】:2010-10-12 18:50:16
【问题描述】:
我想重写一个类的构造函数进行测试。我可以这样做:
SomeClass.metaClass.constructor = { Map params ->
def instance = BeanUtils.instantiateClass(SomeClass)
instance.apply(params)
instance
}
这可行,但我需要新的构造函数仅应用于某些实例。特别是,我想将此更改的范围限制为闭包。我试着做一个类别:
class SomeClassCategory {
static def constructor(instance, params) { }
}
use(SomeClassCategory) {
def x = new SomeClass(params)
}
但这会创建一个名为 constructor 的方法,而不是实际的构造函数。无论如何要在类别中指定构造函数吗?或者我可以仅在 use(Category) 构造之类的块内将更改应用于 SomeClass 的元类吗?
【问题讨论】:
标签: groovy constructor metaprogramming categories