在java 8中理解Stream.generate静态方法签名的问题

mar*_*ouf 9 java generics lambda java-8 java-stream

为什么Java的没有选择这个签名<T> Stream <T> Stream.generate (Supplier <? extends T> supplier)在这一个<T> Stream <T> Stream.generate (Supplier <T> supplier)

我的意思是下面的例子(不编译)是正确的,因为字符串的供应商在一个密码序列流中也是有效的吗?

Supplier <String> constantHello = () -> "Hello";

long count = Stream.<CharSequence>generate(constantHello).count();
Run Code Online (Sandbox Code Playgroud)

Mis*_*sha 9

这是一个错误.请参阅https://bugs.openjdk.java.net/browse/JDK-8132097

它已在java 9中得到纠正.正如您在此处所看到的,现在是方法声明

static <T> Stream<T> generate?(Supplier<? extends T> s)
Run Code Online (Sandbox Code Playgroud)