使用类作为类型参数,可能包含也可能不包含其他类型参数

时间:2016-06-11 20:07:33

标签: java generics type-parameter

我正在使用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是否包含类型参数这一事实)作为类型参数。?

2 个答案:

答案 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;
祝你好运!