我研究过Java是按值传递对象引用,并且为了创建对象的本地副本,我可以执行clone()或copy-constructor。我还查看了深/浅副本以及关于stackoverflow的几篇文章。
现在我看一个例子:
List<String> list = new ArrayList<String>();
String one = "one"
list.add(one);
我只读过几篇文章提到ArrayList实现可克隆,但是并没有真正说出如果类型为List而不是不实现可克隆的ArrayList,那么如何制作“列表”的本地副本。
如果“列表”是ArrayList的类型,则可以调用clone()。
ArrayList<String> list = new ArrayList<String();
list.clone();
但是,如果类型是列表,我就不能。
我应该只使用下面的复制构造函数进行本地复制吗?复制“列表”的最佳方法是什么?
List<String> tmpList = new ArrayList<String>(list);
将列表传递到构造函数中可能是最好的方法。构造函数调用本身将在后台使用System.arraycopy。因此,它将有效地将本地副本与通过构造函数传递的列表分离。
问题内容: 我如何才能向中添加一堆类,然后再从中检索一个类(派生自,但不是),并使用它来生成实际检索到的类的新对象(即,因为那不是抽象的) 所有需要添加的类都源自同一个 抽象 基类() 我真的想不出另一种方法来实现自己的目标,所以希望这是可能的…? 问题答案: 为了防止使用反射,您可能正在寻找抽象工厂模式。这是一个简单的示例,说明如何使用Java 8实现它:
我有一个Employee类对象的arraylist。每个员工都有id、fname、lname等。我需要获取员工id所在元素的索引,例如1234521953。如何找到员工所在的索引?每个身份证都是独一无二的这就是为什么我要通过身份证找到他。 这是我的班级成员: 我将它们添加到:
问题内容: 我有一个如下的示例程序: 我以为我可以修改其中的项目,而不会影响其中的这些项目。但是我错了。 如何制作的单独副本/克隆? 谢谢 问题答案: 是的,这是正确的- 您需要实现(或另一种合适的机制来复制对象,这被许多程序员认为“破坏了”)。您的方法应该对对象内所有可变字段进行深层复制。这样,对克隆对象的修改将不会影响原始对象。 在示例代码中,您正在创建第二个代码,并使用 对相同对象的引用 填
如何创建具有整数和字符串输入类型的?如果我创建一个: 这将是一个类型。如果我将其创建为: 这将是类型。我如何创建一个,它可以接受整数和字符串输入类型?谢谢。
问题内容: 如何制作在不可变对象中包含可变字段的可变对象的防御性副本? MutableObject没有让我设置字段的构造函数。 MutableObject的当前状态应该在Immutable Object中捕获,并且永远不要更改。 问题答案: 您需要做的是 改成: 有关说明,请参见http://www.javapractices.com/topic/TopicAction.do?Id=15
问题内容: 实现深层对象复制功能有点困难。您采取什么步骤来确保原始对象和克隆对象没有引用? 问题答案: 一种安全的方法是序列化对象,然后反序列化。这样可以确保所有内容都是全新的参考。 这是有关如何有效执行此操作的文章。 注意事项:类可能会覆盖序列化,这样就不会创建新实例,例如单例。如果您的课程不是可序列化的,那么这当然也行不通。