Таким образом, в 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?