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

>> 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`.
>
> I was restricting it because "set" does not allow you to add an element 
> either when giving `size()` as the index.  I only belatedly realized that 
> `setAll(int, int, Collection)` is violating this, and allows to add elements 
> and so changes the list size.
> 
> Naming is really important, so calling the range method `setAll` then is I 
> think a poor choice.  So the possible methods we could introduce are:
> 
> - `setAll(int, Collection)` and disallow it to change size; this method is a 
> combination of `setAll(Collection)` and `set(int, T)` similar to how 
> `addAll(int, Collection)` is a combination of `add(int, T)` and 
> `addAll(Collection)`. 
> - `replaceAll(int, Collection)` similar to the above, but allows adding of 
> elements if it runs out of elements to update
> - `replaceAll(int, int, Collection)` a proper name for `setAll(int, int, 
> Collection)` (`splice` was also suggested in the ticket).
> 
> For me I'd either go with:
> - Have `setAll(int, Collection)`
> - Have both `setAll(int, Collection)` and `replaceAll(int, int, Collection)`
> 
> The `replaceAll(int, Collection)` I think does not carry its weight, and 
> would just be confusing given that there would be a much more clear variant 
> `replaceAll(int, int, Collection)`.

* `setAll(int, Collection)` and disallow it to change size
I think this doesn't carry its weight. It's just an explicit name for a narrow 
special case of a more general operation. However, if we're going to have a 
method with this signature, I suggest to not go for the narrow special case, 
but instead at least allow me to overlap the new list across the end of the 
existing list.

* `replaceAll(int, int, Collection)`
We already have `List.replaceAll(UnaryOperator)`, which does something quite 
different (namely, replacing all elements with different elements). I think 
your proposed operation really is more like a `replaceRange`.

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

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

Reply via email to