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