On Tue, 17 Oct 2023 12:16:54 GMT, ExE Boss <d...@openjdk.org> wrote: >> This PR proposes to add a number of "capturing factories" in classes in the >> `java.util.function` package. >> >> The PR additionally (an optionally) proposes to add a new function >> `UnaryOperator::andThenUnary` to allow composition while retaining the >> `UnaryOperator` type. >> >> With the new changes, it is possible to write code like this (example from >> `java.util.function.Function`): >> >> >> // Resolve ambiguity >> var function = Function.of(String::isEmpty); // Function<String, Boolean> >> var predicate = Predicate.of(String::isEmpty); // Predicate<String> >> >> // Fluent composition >> var chained = Function.of(String::length) // Function<String, Integer> >> .andThen(Integer::byteValue); // Function<String, >> Byte> >> >> >> Please see the original bug report for a comprehensive description of these >> proposed changes. >> >> Note: It is not the objective to promote `var` declaration or to prevent >> previous ways of capturing lambdas and method references. The comments in >> the code above is for explaining the binding and once that becomes obvious, >> such comments are likely to not appear in real code. Users that prefers >> having a normal type declaration can still do that. >> >> Note: Functional interfaces of primitives have not been considered (in this >> round). Otherwise, functional interfaces that might be ambiguous or that >> supports composition have been included. Hence, `Supplier` did not get a >> factory method. > > src/java.base/share/classes/java/util/function/BiConsumer.java line 104: > >> 102: * @param <U> the type of the second argument to the operation >> 103: */ >> 104: static <T, U> BiConsumer<T, U> of(BiConsumer<T, U> uncaptured) { > > Suggestion: > > static <T, U> BiConsumer<T, U> of(BiConsumer<? super T, ? super U> > uncaptured) {
@ExE-Boss This and all other "enhancements" hardly compile ;-) ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/16213#discussion_r1362076569