3

我正在尝试使用 gstring 访问嵌套字段,但它会引发异常 groovy.lang.MissingPropertyException

我有两节课

Class Person{
   Address address
}
Class Address{
  String city
}

我正在做的代码中的某个地方,

def person = Person.get(1)
def field = "address.city"
def city = person."${field}"

我试图从人那里获取城市的行是抛出 groovy.lang.MissingPropertyException

如果我尝试使用 gstring 获取直接属性,它可以工作,但上面给出的代码不起作用。

有什么帮助吗?

4

2 回答 2

11

您在这里所做的是尝试按address.city等于 的名称访问属性person."address.city",这意味着此处的点被视为属性名称的一部分 - 而不是您期望的访问分隔符。以下代码应解析您的属性:

def city = field.tokenize('.').inject(person) {v, k -> v."$k"}
于 2011-10-16T13:58:38.383 回答
3

我认为问题在于用于访问子属性的点运算符。

这有效:

class Person{
   String address
}

def person = new Person(address:'Madrid')

def field = 'address'
assert 'Madrid' == person."${field}"

这有效:

class Person{
   Address address
}

class Address {
  String city
}

def person = new Person(address: new Address(city: 'Madrid'))

def field = 'address'
def subField = 'city'
assert 'Madrid' == person."${field}"."${subField}"
于 2011-10-16T12:55:25.137 回答