Groovy:构造函数问题

dbr*_*rin 5 groovy

如果我有这样的课程:

class Person { 
def name
def greeting = "hello $name"
}
Run Code Online (Sandbox Code Playgroud)

我叫bob = new Person(名字:"bob")

当我在这一点上检查鲍勃时,我看到问候语中没有"鲍勃".我究竟做错了什么?

tim*_*tes 11

您可以使用@Lazy注释来解决此问题

class Person { 
  def name
  @Lazy def greeting = "hello $name"
}

bob = new Person(name: "bob")
println bob.greeting
Run Code Online (Sandbox Code Playgroud)

hello bob根据您的要求打印.注释会更改问候语的getter,以便仅在第一次调用时生成(然后缓存结果).greeting一旦它被调用一次就会产生静电的副作用,但是你没有说它是否需要name随着时间的推移而改变(由于变化)...即;

bob = new Person(name: "bob")
println bob.greeting
bob.name = 'dave'
println bob.greeting
Run Code Online (Sandbox Code Playgroud)

将打印:

hello bob
hello bob
Run Code Online (Sandbox Code Playgroud)