3

gstringを使用してネストされたフィールドにアクセスしようとしていますが、例外groovy.lang.MissingPropertyExceptionがスローされます。

私は2つのクラスがあります

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 に答える