我正在使用Generics,我遇到了一个问题。
所以我有一个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> {
....
}
但是当我尝试在我的Priority Queue类中使用Node类作为Type时:
private MaxPriorityQueue<Node> maxPriorityQueue;
它给我一个错误, Type parameter Node is not defined within bounds, should implement java.lang.comparable
。
我认为我在实施这个概念上是错误的。 什么应该是正确的方法?
有没有办法可以更改Priority Queue类,这样就可以使用任何实现类似接口的类(比如A
)(不论A
是否包含类型参数这一事实)作为类型参数。?
答案 0 :(得分:1)
如果我正确理解了您的要求,您需要强制执行PriorityQueue以接受为自己实现类似接口的对象。在这种情况下,您只需要:
class PriorityQueue<Item extends Comparable<Item>> {
并最终如果您想要节点的有效负载的类型参数:
class Node<T> implements Comparable<Node<T>> {
这样你就可以这样做:
private PriorityQueue<Node<Integer>> maxPriorityQueue;
喜欢这里:https://ideone.com/GBnHp7(?)(同样查看评论)
答案 1 :(得分:1)
你可以做你完成的事情。您只需在声明队列时指定Node<T>
的类型,如下所示:
private PriorityQueue<Node<String>> queue;
祝你好运!