这个看似极其简单的问题困扰了我好几个小时。我正在尝试克隆一堆整数对象。我试过了
Stack<Integer> newStack = (Stack<Integer>)oldStack.clone();
然而,这给我一个错误说clone() has protected access in java.lang.Object
我最好的猜测是因为Integer没有实现clone()
,所以我收到了这个错误。那么我应该如何克隆一堆整数呢?
答案 0 :(得分:5)
您确定使用的是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]
答案 1 :(得分:1)
根据Java API documentation,Stack确实实现了cloneable。你确定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());
}
答案 2 :(得分:0)
你不必克隆整数,因为整数是不可变的。
您可以按new Stack().addAll(otherstack)
答案 3 :(得分:0)
不知何故,某个地方隐藏了另一个Stack类。不知道为什么,但使用
导入Stackimport java.util.Stack
而不是依赖
import java.util.*
答案 4 :(得分:-1)
这有效:
Stack<Node> st1=(Stack<Node>) st2.clone();