我有如下定義一個節點類 -普通推到堆棧提供了編譯錯誤
public static class Node<T> {
public T value;
public Node<T> left;
public Node<T> right;
public Node(T value) {
this.value = value;
left = null;
right = null;
}
}
現在我想添加/推Node<Integer>
爲Stack<Node<T>>
,它給了我一個編譯錯誤。
private static <T> Node<T> createTree(Expression expression) {
Stack<Node<T>> nodeStack = new Stack<>();
Stack<Token> tokenStack = new Stack<>();
Token token = getNextToken(expression);
while (token != null) {
if (token instanceof OpenParenthesis) {
tokenStack.push(token);
} else if (token instanceof Element) {
nodeStack.push(new Node<Integer>(((Element) token).value)); // Here
} else if (token instanceof EmptyElement) {
nodeStack.push(null);
} else if (token instanceof CloseParenthesis) {
if (nodeStack.size() == 1) {
tokenStack.pop();
return nodeStack.pop();
}
tokenStack.pop();
Node<T> right = nodeStack.pop();
Node<T> left = nodeStack.pop();
Node<T> node = nodeStack.pop();
node.left = left;
node.right = right;
nodeStack.push(node);
}
token = getNextToken(expression);
}
return null;
}
這行不編譯 -
nodeStack.push(new Node<Integer>(((Element) token).value));
與消息 -
在
Stack
push(Node<T>)
不能應用於(Node<java.lang.Integer>)
嗯,是的。 'T'可以是任何類型,比如'String'。如果它是一個'String',你怎麼期望在棧上推一個整數?我懷疑你可能不希望'createTree'是通用的;也許它應該返回一個'Node
另外,你爲什麼要將'Token'投入到'Number'中?這不會編譯。 – ajb
我的不好,我有一個本地班'Number',這裏我沒有提到。我會重命名它以消除混淆。 –