On Wed, 15 Oct 2025 12:38:08 GMT, John Hendrikx <[email protected]> wrote:

>> modules/javafx.base/src/main/java/javafx/collections/ObservableList.java 
>> line 92:
>> 
>>> 90:      *
>>> 91:      * @param index the start index at which to replace elements, must 
>>> be in
>>> 92:      *              {@code 0 .. size() - col.size()}
>> 
>> This seems to be an unnecessary limitation. It means that as a result of 
>> this operation, ~~the list can only be shorter, but not longer~~ the size of 
>> the list must stay the same. The `setAll(int, int, Collection)` overload 
>> doesn't have this limitation.
>
> Initially, I only wanted to support a "pure" `set` function (to avoid a 
> `set(int)` loop + notifications), where you can have a range of elements 
> replaced by another range of the exact same size (so an `int` and 
> `Collection` is enough to define this).  However, there was an open ticket to 
> have a variant `(from, to, Collection)` which is more powerful, but is not 
> truly a "set" function anymore IMHO.
> 
> I figured I could implement both, but I think having only `set(int, 
> Collection)` would be sufficient for most use cases.
> 
> I suppose it is possible to relax this, but it would have a bit of weird 
> usage I think:
> 
>      List.of(A, B, C, D).setAll(1, List.of(E, F, G))  -> A, E, F, G
>      List.of(A, B, C, D).setAll(2, List.of(E, F, G))  -> A, B, E, F, G
>      List.of(A, B, C, D).setAll(3, List.of(E, F, G))  -> A, B, C, E, F, G
>      
> Now it can also extend the collection, which looks weird.  The other 
> `setAll(from, to, col)` does indeed allow this, but perhaps it shouldn't be 
> called `setAll` as it is not strictly doing what a loop of `set` calls 
> normally could be doing...
> 
> Perhaps I shouldn't have attempted to reuse an old ticket, and just keep it 
> simple with only a `setAll(int, Collection)`...

You're restricting functionality because you perceive the usage to be weird. No 
other bulk operation does this without technical necessity. Now, to me it 
doesn't look weird, but that's besides the point. I don't think a 
general-purpose API should police subjective weirdness.

As far as naming is concerned, the `setAll(int, int, Collection)` overload 
might also be called `replace` or `replaceRange`.

-------------

PR Review Comment: https://git.openjdk.org/jfx/pull/1937#discussion_r2432473831

Reply via email to