-1

这个看似极其简单的问题让我困惑了好几个小时。我正在尝试克隆一堆整数对象。我试过了

Stack<Integer> newStack = (Stack<Integer>)oldStack.clone();

然而,这给了我一个错误说clone() has protected access in java.lang.Object

我最好的猜测是因为 Integer 没有实现clone(),所以我得到了那个错误。那么我应该如何克隆一堆整数呢?

4

5 回答 5

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]

于 2012-12-24T07:31:38.720 回答
1

您不必克隆 Integer s,因为 Integer 是不可变的。

您可以通过new Stack().addAll(otherstack)

于 2012-12-24T07:24:09.653 回答
1

根据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());
    }
于 2012-12-24T07:26:11.867 回答
1

不知何故,某个地方隐藏了另一个 Stack 类。不知道为什么,但是使用导入 Stack

import java.util.Stack

而不是依靠

import java.util.*
于 2012-12-24T07:47:37.257 回答
-1

这有效:

Stack<Node> st1=(Stack<Node>) st2.clone();
于 2016-06-17T04:34:45.957 回答