On Wed, 8 Nov 2023 14:19:47 GMT, Tagir F. Valeev <tval...@openjdk.org> wrote:

>> src/java.base/share/classes/java/util/stream/Gatherer.java line 252:
>> 
>>> 250:      *         Gatherer as input that Gatherer
>>> 251:      */
>>> 252:     default <AA, RR> Gatherer<T, ?, RR> andThen(Gatherer<? super R, 
>>> AA, ? extends RR> that) {
>> 
>> It would be great to remove AA type parameter, which is mentioned only once, 
>> so could be replaced with `?`. This will improve user experience if they 
>> happen to need to specify type parameters explicitly.
>
> This is especially important given that often you don't know the AA type at 
> all. E.g., imagine that you are doing `.andThen(Gatherers.fold(...))`, but 
> `fold` returns `Gatherer<T, ?, R>`, so you can specify explicit `RR`, but not 
> `AA`.

Has this proven to be a problem for things like 
[Collectors.mapping(…)](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/stream/Collectors.html#mapping(java.util.function.Function,java.util.stream.Collector))
 ? 🤔 

There's one implication on turning it into a wildcard—it may actually cause 
issues implementing the composition directly in the override, as you won't have 
a typename to refer to.

Do you have a concrete example of where the current "encoding" causes a 
caller-problem?

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

PR Review Comment: https://git.openjdk.org/jdk/pull/16420#discussion_r1386796562

Reply via email to