你是对的,这T是一个类型参数。在这种情况下,它可以被任何类型替换,因为它没有约束。
这个构造函数有一个类型约束:
PriorityQueue(Collection<? extends E> c)
并且应该被理解为:使用作为类型参数的任何类型来创建一个新实例,该类型扩展了该类型(PriorityQueue包括其自身),其中. 例子:CollectionEEEPriorityQueue
List<String> list = new ArrayList<String>();
PriorityQueue<String> pq = new PriorityQueue<String>(list);
在这种情况下E(的类型参数pq)是String并且类型参数list匹配谓词? extends E,因为它也是String。
这也可以:
List<String> list = new ArrayList<String>();
PriorityQueue<Object> pq = new PriorityQueue<Object>(list);
sinceString是 的子类Object,但这会在编译时失败:
List<String> list = new ArrayList<String>();
PriorityQueue<Integer> pq = new PriorityQueue<Integer>(list);
我建议您在此处阅读有关 Java 泛型的更多信息。