----- Mail original ----- > De: "Paul Sandoz" <[email protected]> > Cc: [email protected] > Envoyé: Mercredi 4 Novembre 2015 10:57:41 > Objet: Re: Proposed API for JEP 259: Stack-Walking API > > > > On 4 Nov 2015, at 10:03, Remi Forax <[email protected]> wrote: > > > > Hi Paul, > > > > The use of BaseStream was just an example, here is another one that works > > only if the function first parameter type is declared as '? super > > Stream<StackWalker.StackFrame>'. > > > > static Function<Stream<?>, Integer> counter() { > > return stream::count; > > } > > > > ... > > StackWalker walker = ... > > int count = walker.walk(counter()); > > > > 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. > > Paul. > Rémi [1] http://openjdk.java.net/jeps/8043488
