你是对的,这T
是一个类型参数。在这种情况下,它可以被任何类型替换,因为它没有约束。
这个构造函数有一个类型约束:
PriorityQueue(Collection<? extends E> c)
并且应该被理解为:使用作为类型参数的任何类型来创建一个新实例,该类型扩展了该类型(PriorityQueue
包括其自身),其中. 例子:Collection
E
E
E
PriorityQueue
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 泛型的更多信息。