我正在挖掘groovy使用点符号优雅地导航对象层次结构的能力。
我有一个问题,是否有一种在导航过程中优雅地创建嵌入对象的方法。例如,给定以下类:
class Bar {
int a
}
class Foo {
Bar b
}
我希望能够做到这一点:
Foo f = new Foo()
f.b.a = 4
目前,我必须这样做:
Foo f = new Foo()
f.b = new Bar()
f.b.a = 4
请注意,除非通过导航或其他方式设置,否则我需要f.b为null。所以盲目地在Foo类中实例化b = new Bar()不符合要求的需要。
答案 0 :(得分:1)
您可以使用null安全操作符?.
或覆盖b
中Foo
的getter,如果它为null,则在b
中设置Foo
的新实例,把它归还。
这将是:
class Foo {
Bar b
Bar getB() {
if(b == null)
this.@b = new Bar()
b
}
}
答案 1 :(得分:0)
您可以在一行中初始化整个层次结构,如下所示:
Foo f = new Foo(b: new Bar(a: 4))