For Java 8 source code in Stream class:
public static<T> Stream<T> generate(Supplier<T> s) {
        ...
}
In Optional class
public T orElseGet(Supplier<? extends T> other) {
    ...
}
I already read this post: PECS, but I have some confusison.
Why generate method parameter(Supplier<T> s) use non-variance, but orElseGet method parameter(Supplier<? extends T> other) use Covariance, how to decide use Covariance or non-variance?
 
    