On Fri, 9 Dec 2022 20:19:57 GMT, Nir Lisker <[email protected]> wrote:
> So... it's also a list.
I think it's a big mess, you can already see that in the hierarchy, extending
both `ObservableObjectValue<ObservableList<E>>` (which is `ObservableValue<T>`)
but also being a `ObservableList<E>`. One or the other is going to break;
either it is a property containing a list, or it is a list, it can't be both.
Either I can do:
listProperty.equals(normalList);
or:
listProperty.equals(aNormalPropertyContainingAList);
It looks like the first was chosen (I suppose because the `List` interface
defines `equals` in that way) and the 2nd case will break (and is unfixable as
equals needs to be symmetric).
Looking a bit further, I think extending
`ObservableObjectValue<ObservableList<E>>` was a mistake here. It's also what
contributes to making the collection properties so confusing (ie. you can
replace all elements, or you can replace the entire list, which are two
different actions that require two different forms of listeners) -- no other
properties allow you to replace it's "container" -- ie. if properties had used
an `AtomicReference` internally to store their value, they would not offer me
the option to replace either the entire `AtomicReference` or only the value of
the reference.
-------------
PR: https://git.openjdk.org/jfx/pull/969