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

标签 java generics type-parameter

我正在使用泛型,但遇到了问题。 所以我有一个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/

相关文章:

java - Spring Roo 和 Hibernate : how to prevent deletion

java - Java 类型删除教程

c# - 从头开始使用 IEnumerable<T> 编写 List<T> 的实现

scala - 类型参数子句中的广义约束?

java - Apache POI Powerpoint 替代方案

java - 泛型的类型安全

java - 具有类似数组的性能的 Java Bitset 替代品?

generics - 如何指定一个泛型函数,其工作方式就像有 Int、Double 等父类(super class)型一样?

C++ 模板成员函数已定义为相同类型

java - 实例化类型参数而不传递对象