绑定不匹配链接列表Java

时间:2014-03-07 20:36:08

标签: java generics linked-list stack

我正在使用链接列表在java中创建一个堆栈,但是我得到了一个错误,这使我无法做任何事情。 这里首先是Node类

public class SortedLinkedSetNode<T extends Comparable<T>>{
    protected T value;
    protected  SortedLinkedSetNode<T> next;
    // other methods
} 

现在这里是Stack类,我只会给出Push方法,因为那里会发生错误。

 public class StackList<E> implements Stack<E> {
     protected SortedLinkedSetNode upperMost;
     public void push( E element) {
        SortedLinkedSetNode <E> newNode = new SortedLinkedSetNode (element);
        newNode.next = upperMost;
        upperMost = newNode;    
    }
}

问题是,当我尝试在Push中创建newNode时,我收到此消息:

Bound mismatch: The type E is not a valid substitute for the bounded parameter <T extends Comparable<T>> of the type  SortedLinkedSetNode<T>

我尝试修改堆栈类,使其为

public class StackList<E extends Comparable<E>> implements Stack<E> {

但我不允许修改它(那就是赋值规范)。我也试过使用T不使用任何东西和各种组合,但总是有错误。我认为这一切都来自于(给出)

public class SortedLinkedSetNode<T extends Comparable<T>>{ 

但我不确定,也不确定该怎么办,如果真的是从这里开始  有人可以帮我解决这个问题,以及我如何解决它。如果我不能在堆栈类中创建一个新节点,我怎么能开始做Push Pop等..?谢谢

2 个答案:

答案 0 :(得分:1)

您已使SortedLinkedSetNode类成为通用的,T的上限。但是,当您尝试在E中使用StackList的类时,您没有使用相同的上限声明E,从而导致绑定不匹配。尝试在E上添加StackList的上限:

public class StackList<E extends Comparable<E>> implements Stack<E> {

此外,SortedLinkedSetNode类是通用的,但您不一致地将泛型类型参数应用于使用该类的代码。

声明变量upperMost时,请使用<E>

protected SortedLinkedSetNode<E> upperMost;

此外,在您创建新<E>时添加SortedLinkedSetNode(如果您使用的是Java 1.7 +,则可能是“菱形”运算符“<>。”

SortedLinkedSetNode<E> newNode = new SortedLinkedSetNode<E> (element);

答案 1 :(得分:0)

“E类型不是有效参数的有效替代品&gt;类型为SortedLinkedSetNode”意味着ET extends Comparable<T>更通用。您声明您的通用类型T必须extend Comparable<T>,而<E>没有此类限制,因此E对您的SortedLinkedSetNode<T extends Comparable<T>>无效}。

如果您无法修改Stack类,那么您别无选择,只能将类更改为

public class SortedLinkedSetNode<T>

此外,您还需要在对象实例化中使用<E>

new SortedLinkedSetNode<E>(element);