这个看似极其简单的问题让我困惑了好几个小时。我正在尝试克隆一堆整数对象。我试过了
Stack<Integer> newStack = (Stack<Integer>)oldStack.clone();
然而,这给了我一个错误说clone() has protected access in java.lang.Object
我最好的猜测是因为 Integer 没有实现clone()
,所以我得到了那个错误。那么我应该如何克隆一堆整数呢?
你确定你使用的是 java.util.Stack 吗?它从 Vector 继承克隆
public synchronized Object clone() {...
我跑了这个测试
Stack<Integer> st = new Stack<Integer>();
st.push(1);
Stack<Integer> clone = (Stack<Integer>)st.clone();
System.out.println(clone);
它给
[1]
您不必克隆 Integer s,因为 Integer 是不可变的。
您可以通过new Stack().addAll(otherstack)
根据Java API 文档,Stack 确实实现了可克隆。您确定 oldStack 确实是 Stack 类型吗?
编辑
我已经使用以下代码对此进行了测试,但没有出现任何异常:
Stack<Integer> stack = new Stack<Integer>();
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
Stack<Integer> s2 = (Stack<Integer>) stack.clone();
while (!s2.empty()) {
System.out.println(s2.pop());
}
不知何故,某个地方隐藏了另一个 Stack 类。不知道为什么,但是使用导入 Stack
import java.util.Stack
而不是依靠
import java.util.*
这有效:
Stack<Node> st1=(Stack<Node>) st2.clone();