我正在使用泛型,但遇到了问题。
所以我有一个Node class
其中有 type parameter<T>
这扩展了可比性。
public class Node<T extends Comparable<T>> implements Comparable<Node<T>> {
private T info;
private Node next;
private Node previous;
}
现在,我设计了另一个类,比如 Priority Queue class
其中还包含一个可比较的类型参数。
public class PriorityQueue<Item extends Comparable<Item>>
implements Iterable<Item> {
....
}
但是当我尝试使用 Node 类作为优先级队列类中的类型时,如下所示:
private MaxPriorityQueue<Node> maxPriorityQueue;
它给了我一个错误, Type parameter Node is not defined within bounds, should implement java.lang.comparable
。
我认为我在实现这个概念上是错误的。 正确的做法应该是什么?
有没有一种方法可以更改优先级队列类,以便它可以采用任何实现类似接口(interface)的类(例如 A
)(无论 A
是否包含类型参数)作为类型参数.?
最佳答案
如果我正确理解您的要求,您需要强制您的 PriorityQueue 接受为自己实现类似接口(interface)的对象。在这种情况下,您只需要:
class PriorityQueue<Item extends Comparable<Item>> {
最终,如果您想要节点有效负载的类型参数:
class Node<T> implements Comparable<Node<T>> {
这样你就可以做到这一点:
private PriorityQueue<Node<Integer>> maxPriorityQueue;
就像这里:https://ideone.com/GBnHp7 (?)(也看看评论)
关于java - 使用类作为类型参数,该类可能包含也可能不包含其他类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37768081/