我正在使用链接列表在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等..?谢谢
答案 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”意味着E
比T extends Comparable<T>
更通用。您声明您的通用类型T
必须extend Comparable<T>
,而<E>
没有此类限制,因此E
对您的SortedLinkedSetNode<T extends Comparable<T>>
无效}。
如果您无法修改Stack类,那么您别无选择,只能将类更改为
public class SortedLinkedSetNode<T>
此外,您还需要在对象实例化中使用<E>
new SortedLinkedSetNode<E>(element);