> From: "Viktor Klang" <viktor.kl...@oracle.com> > To: "Remi Forax" <fo...@univ-mlv.fr>, "core-libs-dev" > <core-libs-...@openjdk.java.net> > Sent: Wednesday, January 17, 2024 5:49:01 PM > Subject: Re: Gatherer API : wildcards complaint
> Hi Rémi, > Thank you for the feedback—examples would be much appreciated! Here is an example with an interface and a class, interface Counter { void increment (); int value (); } Gatherer < String , Counter , Integer > count () { class CounterImpl implements Counter { int counter ; @Override public void increment () { counter ++; } @Override public int value () { return counter ; } } Supplier < CounterImpl > initializer = CounterImpl :: new ; Gatherer . Integrator < Counter , String , Gatherer . Downstream <? super Integer >> integrator = ( counter , _ , _ ) -> { counter .increment(); return true ; }; BiConsumer < Counter , Gatherer . Downstream <? super Integer >> finisher = ( counter , downstream ) -> { downstream .push( counter .value()); }; return Gatherer . ofSequential ( initializer , integrator , finisher ); // does not compile :( } void main () { System . out .println( Stream . of ( "foo" ).gather(count()).findFirst().orElseThrow()); } if instead of explicitly typing each functions, we directly call ofSequential, it works return Gatherer . ofSequential ( CounterImpl :: new , ( Counter counter , String _ , Gatherer . Downstream <? super Integer > _ ) -> { counter .increment(); return true ; }, ( Counter counter , Gatherer . Downstream <? super Integer > downstream ) -> { downstream .push( counter .value()); } ); because here, CounterImpl::new is inferred as Supplier<Counter>. > Cheers, > √ > Viktor Klang > Software Architect, Java Platform Group > Oracle > From: core-libs-dev <core-libs-dev-r...@openjdk.org> on behalf of Remi Forax > <fo...@univ-mlv.fr> > Sent: Wednesday, 17 January 2024 16:55 > To: core-libs-dev <core-libs-...@openjdk.java.net> > Subject: Gatherer API : wildcards complaint > Hello, > this is a minor complaint but I do not see a raison to not getting this right. > Currently the Gatherer API does not use the wildcard correctly, which is not > fully an issue because there is "enough" wildcards that if you rely on the > inference, it will work. > The problem is that when you write code, you make mistakes and usually when > you > have a typing issue, a way to debug it is to fix the type arguments > de-activating the inference. > But because there are some missing wildcards, this debugging strategy just > fail > flat with more typing errors. > I think that fixing the missing wildcards will hep users (or a least me) to > have > a better experience when using the Gatherer API. > I can help and propose a PR if you want. > regards, > Rémi