我有一段代码如下
def revisedSections=sections.collect{sectionObj->
sectionObj.questionCategories=sectionObj.questionCategories.collect{qCat->
def flag=false
this.questionSet.questions = this.questionSet.questions.collect{qObj->
if(qCat.category == qObj.questionCategory.category){
qCat.questions.add(qObj)
//this.questionSet.questions.remove(qObj)
flag=true
}
qObj
}
if(flag){
qCat
}
}
sectionObj
}
log.debug('revisedSections'+revisedSections)
this.metaClass.getSectionsData={-> revisedSections }
log.debug 'this.sectionsData '+this.sectionsData
我想将sectionsData属性添加到实例,然后将实例转换为json 但我无法使用此代码访问动态添加的属性,是否有我缺少的东西?
答案 0 :(得分:0)
您可以使用mixins来完成您正在寻找的内容。像下面这样的东西是本机的和可接受的Groovy:
class RevisedSection {
String sectionData
}
class Section {
String name
}
Section.mixin RevisedSection
def section = new Section(sectionData: "Data", name: "Section Name")
assert section.sectionData == "Data"
希望这有帮助!
答案 1 :(得分:0)
如果我理解你想要正确实现的目标,那么使用元编程很容易实现,它应该可行。
如果没有关于代码上下文的信息,我只能猜测对象的基类等,所以这里有一些代码在groovy控制台中运行,完美运行
class D {
int someValue
def init() {
this.metaClass.getSomeString={->someValue as String}
}
}
def d=new D()
d.init()
d.someValue=76
println d.someString
结果当然是字符串'76'被打印到控制台。
另一个建议,使用静态编译的getter:
class D {
private Closure computation
int someValue
def init() {
this.computation={someValue}
}
String getSomeString(){
computation() as String
}
}