我需要复制两个对象(都是堆栈)。
我想将临时对象的内容复制到当前对象中,然后清除临时对象的内容。
例如,对于树,它将类似于:
tree = tempTree;
tempTree.clear();
但是,树参考现在指向temptree,如果我清除temptree,它也将清除树。我看了其他帖子,他们谈到了实现clonable或者做了一个复制构造函数,我确信有一种更好的方法可以用Java复制对象。
我的对象就像Stack对象一样。
如何在没有相同对象引用的情况下将内容从对象复制到另一个对象?
答案 0 :(得分:1)
不幸的是,您必须自己编写代码。好消息是Stack
是一种List
,所以你可以很容易地复制它。
Stack stack = ...; //Existing stack
Stack tempStack = new Stack();
tempStack.addAll(stack);
现在tempStack和stack以相同的顺序引用同一组对象,但可以独立地进行变异。
答案 1 :(得分:0)
直接答案:您创建一个新实例,然后将旧实例的内容复制或添加到新实例。这就是辅助方法,复制构造函数和可复制实现也在幕后工作,所以最后你会做同样的事情。
关于实现cloneable,请在实际开始实施之前参见this question - 这可能是最不推荐的方法,原因在于该讨论中概述和引用的原因。
复制构造函数可能是推荐的方法。
答案 2 :(得分:0)
如果复制对象具有相同的类类型且可序列化,那么您也可以"只是"序列化和反序列化它。这样你就不会得到一个浅的副本,而是一个完整的新对象树。有一些实用程序类可以帮助解决这个问题。 Apache公共有一个,我不是100%肯定,但我认为在jdk5中甚至有一个直接。我不得不把它挖出来。
答案 3 :(得分:-1)
查看Object.clone()
http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Object.html#clone()
Stack extends Vector实现了cloneable,所以你可以简单地执行:
Stack stackb = stacka.clone();