以下三个签名有什么区别?
static <T> void foo(List<T>, Comparator<? super T>);
static <T> void bar(List<? extends T>, Comparator<T> );
static <T> void baz(List<? extends T>, Comparator<? super T>);
我知道泛型中的含义extends和super含义。foo我的问题是,bar和之间是否有区别baz。我应该使其中一个参数不变,而另一个参数在适当的方向上变体,还是应该使它们都变体?这有什么不同吗?