Java 通配符类型在类型参数中提供了什么灵活性?

Java 通配符类型在类型参数中提供了什么灵活性?,java,generics,Java,Generics,考虑静态实用程序中的一般min方法,该方法用于返回集合中的最小元素。为什么我们需要将其声明为 public static <T extends Comparable<? super T>> T min(Set<? extends T> producerSet) publicstatic这涵盖了T是可比较的实现者的子类的情况。考虑以下事项: public static class A implements Comparable<A> {

考虑静态实用程序中的一般
min
方法,该方法用于返回集合中的最小元素。为什么我们需要将其声明为

 public static <T extends Comparable<? super T>> T min(Set<? extends T> producerSet)

publicstatic这涵盖了T是可比较的实现者的子类的情况。考虑以下事项:

public static class A implements Comparable<A> {

   public int compareTo(A o) {
      return 0;
   }
}
public static class B extends A {}

public static <T extends Comparable<T>> T min(Set<? extends T> producerSet) {
   return null;
}

public static void main(String[] args) {
   Set<B> set = new HashSet<B>();
   min(set); // incompatible with method signature
}
公共静态类A实现可比较{
公共整数比较(AO){
返回0;
}
}
公共静态类B扩展了{}

publicstatictmin(SetDrive by comment:这可能在Angelika Langer的泛型常见问题解答中的某个地方,因为一切都是如此。(当涉及泛型问题时,该文档是强制性阅读。)见鬼,它在泛型教程中:-一个例子是,如果你有类
Animal implements Comparable
,和
Cat extensed Animal
,如果你没有使用
?super t
,那么你就不能调用
min()
列表上的
,因为它要求项目类型与自身完全可比,而您只需要它与自身或超类型可比。
public static class A implements Comparable<A> {

   public int compareTo(A o) {
      return 0;
   }
}
public static class B extends A {}

public static <T extends Comparable<T>> T min(Set<? extends T> producerSet) {
   return null;
}

public static void main(String[] args) {
   Set<B> set = new HashSet<B>();
   min(set); // incompatible with method signature
}