Tôi có đường dẫn cho đối tượng trong đối tượng trong đối tượng và tôi muốn đặt đối tượng bằng cách sử dụng khả năng động của Groovy. Thông thường, bạn có thể làm như vậy chỉ bằng cách thực hiện như sau:Groovy: Đặt phương thức lồng nhau động sử dụng chuỗi như đường dẫn
class Foo {
String bar
}
Foo foo = new Foo
foo."bar" = 'foobar'
Điều đó hoạt động OK. Nhưng nếu bạn có các đối tượng lồng nhau thì sao? Một cái gì đó như:
class Foo {
Bar bar
}
class Bar {
String setMe
}
Bây giờ tôi muốn sử dụng các thiết lập năng động, nhưng
Foo foo = new Foo()
foo."bar.setMe" = 'This is the string I set into Bar'
Trả về một MissingFieldException.
Bất kỳ gợi ý nào?
CẬP NHẬT: Nhờ Tim đã chỉ cho tôi đúng hướng, mã ban đầu trên đó hoạt động tốt khi truy xuất thuộc tính, nhưng tôi cần đặt giá trị bằng chuỗi đường dẫn.
Đây là những gì tôi đã đưa ra từ trang Tim gợi ý:
công trìnhdef getProperty(object, String propertyPath) {
propertyPath.tokenize('.').inject object, {obj, prop ->
obj[prop]
}
}
void setProperty(Object object, String propertyPath, Object value) {
def pathElements = propertyPath.tokenize('.')
Object parent = getProperty(object, pathElements[0..-2].join('.'))
parent[pathElements[-1]] = value
}
http: //stackoverflow.com/questions/5488689/how-to-retrieve-nested-properties-in-groovy –
Tôi đã có thể hoàn thành nhiệm vụ bằng cách xây dựng và sử dụng phương thức getProperty, tôi sẽ đặt câu trả lời ở trên kể từ khi nhận xét phần không phải là rất tốt để đặt mã vào –