RFR: JDK-8298200 Clean up raw type warnings in javafx.beans.property.* and com.sun.javafx.property.* [v2]
Nir Lisker
nlisker at openjdk.org
Fri Dec 9 20:22:11 UTC 2022
On Fri, 9 Dec 2022 20:11:24 GMT, John Hendrikx <jhendrikx at openjdk.org> wrote:
>> I suggest the following method:
>>
>>
>> @Override
>> public boolean equals(Object obj) {
>> if (this == obj) {
>> return true;
>> }
>> if (!(obj instanceof List<?> otherList)) {
>> return false;
>> }
>> if (size() != otherList.size()) {
>> return false;
>> }
>> ListIterator<E> e1 = listIterator();
>> ListIterator<?> e2 = otherList.listIterator();
>> while (e1.hasNext() && e2.hasNext()) {
>> if (!Objects.equals(e1.next(), e2.next())) {
>> return false;
>> }
>> }
>> return true;
>> }
>>
>>
>> Technically, there's no need to check `hasNext` on both since they have the same length, but it doesn't matter.
>>
>> I also don't like the names `e1` and `e2` for list iterators :)
>
> There is a lot to not like about this method. Especially because apparently you can pass in a `List` to this equals method that is for a `ReadOnlyListProperty`. How is a list equal to a property? What sense does it make to do this:
>
> ReadOnlyListProperty<String> x;
>
> x.equals(List.of("a", "b", "c"));
>
> Shouldn't that be:
>
> x.get().equals(List.of("a", "b", "c"));
>
> ?
I was just going to write that now that I look at it, this is a list comparison according to `List::equals`. No need to redo the whole logic..
About the validity of the comparison, `ReadOnlyListProperty` also implements `List`:
ReadOnlyListProperty<E> extends ListExpression<E>
ListExpression<E> implements ObservableListValue<E>
ObservableListValue<E> extends ObservableObjectValue<ObservableList<E>>, ObservableList<E>
ObservableList<E> extends List<E>, Observable
So... it's also a list.
-------------
PR: https://git.openjdk.org/jfx/pull/969
More information about the openjfx-dev
mailing list