the implementation of
ListProperty appears to make it very difficult to use as an optional value, i.e.
getOrElse will never produce the value specified as
The reason being that a
AbstractCollectionProperty initialises the property with
defaultValue = emptySupplier() and
convention = noValueSupplier()
emptySupplier yields an empty list so has
presence in property terms which means that
getOrElse will always resolve to
get (as there is a value present for it to get)
The only workaround for this that I can find is to add a call like this
Iterable<String> empty = null myListStringProperty.set(empty)
In groovy, this further requires use of
@CompileStatic to enable it to disambiguate between
This seems v clumsy behaviour at best (and it’s also not documented as far as I can see). Is there a better way to do this or is the implementation somewhat flawed?