----- Mail original ----- > De: "Mandy Chung" <mandy.ch...@oracle.com> > À: "Remi Forax" <fo...@univ-mlv.fr> > Cc: "Paul Sandoz" <paul.san...@oracle.com>, core-libs-dev@openjdk.java.net > Envoyé: Jeudi 5 Novembre 2015 22:48:45 > Objet: Re: Proposed API for JEP 259: Stack-Walking API > > > > On Nov 4, 2015, at 5:00 AM, Remi Forax <fo...@univ-mlv.fr> wrote: > > > >> > >> Good point. Damn, i don’t like wildcards :-) > >> > >> The following works fine: > >> > >> static <T> Function<Stream<T>, Long> counter() { > >> return Stream::count; > >> } > >> > >> But there could also cases where one is stuck using a wildcard: > >> > >> Function<Stream<?>, Long> f = Stream::count; > > > > > > Wildcards are not that complex, but because they are use-side annotations, > > it's really easy to forget them, and IDEs do not help here :( > > > > I really hope that the JEP about declaration site variance [1] will be > > implemented at the beginning of jdk 10, it will remove the need of > > wildcards for functional interfaces. > > > > Remi, Paul, > > The current StackWalker::walk method: > <T> T walk(Function<Stream<StackFrame>, T> function) > > This would mean that the StackWalker API is intended to work with a function > taking Stream<StackFrame> but not Stream<?>. > > Changing to > <T> T walk(Function<? super Stream<StackFrame>, ? extends T> function) > > will allow use of some existing functions taking Stream<?>. I don’t object > changing it to use wildcard. > > However, the StackWalker API is specific for reading StackFrame and I would > expect it’s reasonable if it doesn’t work with a function taking Stream<?> > as the useful functions such as Stream::count, > Stream::collect(Collectors.toList(…)) can be used. > > Just want to double confirm the advice which way to go.
yes, it is. Stream<?> is perhaps not the best example, using a Function<? super Stream<StackFrame>, ? extends T> also allow calls that use a Stream<Object> (no wildcard here !), like this: Function<Stream<Object>, Void> fun = stream -> { stream.forEach(System.out::println); return null; }; stackWalker.walk(fun); > > Mandy regards, Rémi