On 20 Jul 2015, at 19:08, Remi Forax <[email protected]> wrote: > Hi all, hi Paul, > I've found that the signature of Stream.generate doesn't to use a wildcard > hence some program are rejected even if there are valid, by example: > public static void main(String[] args) { > Supplier<String> supplier = () -> "hello"; > Stream<CharSequence> s = Stream.generate(supplier); > } > > The fix is simple, in interface Stream, generate should be declared like this > : > public static<T> Stream<T> generate(Supplier<? extends T> s) > and > the field 's' of the InfiniteSupplyingSpliterator.OfRef should be also > declared as a Supplier<? extends T>. >
I believe such changes to Stream.generate are backwards compatible because overriding is not possible. (In addition static method on an interface are scoped to that interface, but i am not sure if that matters in this case.) We could also adjust Stream.iterate as well: public static<T, S extends T> Stream<T> iterate(final S seed, final UnaryOperator<S> f) Seems appropriate for consistency with Stream.generate. I presume that is backwards compatible as well? Paul.
