因此,在groovy中,您可以定义一个字符串,每次读取其值时都会延迟检索其值。
System.setProperty('foo', 'bar')
def getMyValue = {
return System.getProperty('foo')
}
def myData = [
value1: "${ getMyValue() }",
vaule2: "${ -> getMyValue() }",
]
System.setProperty('foo', 'bam')
println "${myData}"
System.setProperty('foo', 'baz')
println "${myData}"
运行时会产生收益
[value1:bar, vaule2:bam]
[value1:bar, vaule2:baz]
这对于字符串值来说真的很好]
我想知道是否可以对数字类型进行类似操作
def myData = [ myInt: { -> Integer.valueOf(System.getProperty('somePropThatIsSetDownStream')) }, ]
或者如果有方法可以覆盖地图上的get方法,以便执行get时,我可以执行一个转换myData.myInt值的闭包
def valueTransformer = { key, map -> if(map[key] instanceOf Closure) { return map[key].call() } return map[key] }
也许有一个闭包可以覆盖在调用myData.myInt时发生的逻辑吗?
因此,在groovy中,您可以定义一个字符串,每次读取其值时都会延迟检索其值。 System.setProperty('foo','bar')def getMyValue = {return System.getProperty('foo')} def myData = ...
这取决于您要实现的语法,但是可能有很多解决方案。