使用对象访问属性。“$ {property}”

时间:2012-07-13 09:56:12

标签: groovy

我正在进行一些动态过滤,并且有:

class Filterable {
    def statusId
    def secondaryFilterable
}
...
def filter = new Filter(validIds: [1], fieldName: 'statusId')
...
class Filter {

    def validIds = [] as Set
    def fieldName
    private boolean containsFieldValue(input) {
        def fieldValue = input."${fieldName}"
        return fieldValue in validIds
    }
}

哪个属性适用于一个属性。但是,现在我需要通过二次过滤来过滤 - 比如

def filter = new Filter(validIds: [1], fieldName: 'secondaryFilterable.statusId')

引发groovy.lang.MissingPropertyException。有什么建议吗?

1 个答案:

答案 0 :(得分:2)

引用属性假设点是属性名称的一部分。

一个简单的解决方案是:

...
def fieldValue = fieldName.split(/\./).inject(input){ parent, property -> parent?."$property" }
...

这将使用子符号表示子属性以递归方式查找字段值。

Groovy Web控制台上的

I put up a working example here