- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在阅读 Vaadin 教程时遇到了这段代码。但是我无法理解 clone
在这种情况下的目的。谁能解释一下?
/**
* Persists or updates customer in the system. Also assigns an identifier for
* new Customer instances.
*
* @param entry
*/
public synchronized void save(Customer entry) {
if (entry == null) {
LOGGER.log(Level.SEVERE,
"Customer is null. Are you sure you have connected your form to the application as described in tutorial chapter 7?");
return;
}
if (entry.getId() == null) {
entry.setId(nextId++);
}
try {
entry = (Customer) entry.clone();
} catch (Exception ex) {
throw new RuntimeException(ex);
}
contacts.put(entry.getId(), entry);
}
/**
* Sample data generation
*/
public void ensureTestData() {
if (findAll().isEmpty()) {
final String[] names = new String[] { "Gabrielle Patel", "Brian Robinson", "Eduardo Haugen",
"Koen Johansen", "Alejandro Macdonald", "Angel Karlsson", "Yahir Gustavsson", "Haiden Svensson",
"Emily Stewart", "Corinne Davis", "Ryann Davis", "Yurem Jackson", "Kelly Gustavsson",
"Eileen Walker", "Katelyn Martin", "Israel Carlsson", "Quinn Hansson", "Makena Smith",
"Danielle Watson", "Leland Harris", "Gunner Karlsen", "Jamar Olsson", "Lara Martin",
"Ann Andersson", "Remington Andersson", "Rene Carlsson", "Elvis Olsen", "Solomon Olsen",
"Jaydan Jackson", "Bernard Nilsen" };
Random r = new Random(0);
for (String name : names) {
String[] split = name.split(" ");
Customer c = new Customer();
c.setFirstName(split[0]);
c.setLastName(split[1]);
c.setStatus(CustomerStatus.values()[r.nextInt(CustomerStatus.values().length)]);
c.setBirthDate(LocalDate.now().minusDays(r.nextInt(365 * 100)));
save(c);
}
}
}
注意:Customer
有以下数据成员:private Long id, private String firstName = "", private String lastName = "", private LocalDate birthDate, private CustomerStatus status, private String电子邮件 = ""
最佳答案
您的save
方法是公开的,因此可以从任何地方调用。如果有人保存了一个客户,然后又更改了他们保存的客户对象,您不希望新的更改反射(reflect)在您在 contacts
中得到的内容中。在那里保存一个克隆确保你不会受到他们正在做的事情的影响。
But assuming save method isn't called from anywhere else other than
ensureTestData()
, do we still need to clone it?
从技术上讲,近视没有。您的 ensureTestData
方法是保存它创建的客户还是它的克隆都没有区别。不过,在那种情况下,您需要将 save
方法声明为私有(private),否则您将不知道何时有人从某处调用它。在许多情况下,人们仍然会克隆以防止将来对代码的更改造成不良影响。
关于java - 这里为什么要用clone?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54763193/
什么是 vb6 或 java 中的对象克隆?我们在什么情况下使用克隆?克隆对象是什么意思?谁能用例子告诉我。 最佳答案 克隆实际上是将对象数据复制到新对象中。 此示例不克隆数据: Foo p = ne
ArrayList a=new ArrayList(); a.add(5); ArrayList b=(ArrayList)a.clone(); a.add(6); System.out.printl
这个问题在这里已经有了答案: Why does cloned() allow this function to compile (1 个回答) 关闭 3 个月前。 假设我们有一个可以克隆的某种类型的
我有这样的代码,我需要在其中将某些内容插入到两个单独的 HashMap 中。我只想要实现克隆的通用类型。 use std::collections::HashMap; use std::clone::
这段代码(also on play) use std::sync::Arc; struct Foo { x: isize, // Something complex in actual cod
我有按钮 Drag to insert h1 tag 当你拖动它时,我希望按钮留在原来的位置,助手是 Example在你放下它的地方,你会放下h1没有任何可拖动或 jQuery UI 样式的标记。 所
覆盖 clone 方法,而不实现 Cloneable 接口(interface)并且不调用 super.clone() 是一个好习惯。这样,就不会抛出 CloneNotSupportedExcepti
public abstract class Shape implements Cloneable { private String id; protected String type;
克隆远程仓库后,它不会通过 -a 选项显示任何远程分支。可能是什么问题呢?如何调试呢?在此片段中,未显示两个远程分支: $ git clone --depth 1 git://git.savannah
我看过这个答案for a git clone error ,建议不要克隆整个 repo,而是只克隆最新的提交,然后使用 unshallow 获取其余的提交。 考虑以下两个命令 1. git clone
当在网上搜索如何以多态方式深层复制对象的可能性时,我发现了 solution声称可以使用 clone() 方法解决许多问题,例如无法克隆 final 字段。该解决方案结合了在 clone() 实现中使
我正在尝试创建一个动态表单来向业务合作伙伴展示。 目标是能够在单击按钮时根据需要添加选择元素。但是,当它被点击时,它会复制模板两次,而不是一次。 这里只是我尝试过的代码的一些变体和 here is t
我知道实现 Object#clone() 的约定表明您应该调用 super.clone() 来获取复制的对象。 但我只是想知道如果我不这样做的话会有什么后果。让我们假设这个例子: class Some
我所说的示例:http://jsfiddle.net/bsnxp/1/ 如果你检查源 .show().clone() display 是 inline-block (它应该是什么)并且 .clone(
我正在编写代码来创建对象、克隆对象,然后比较两者。 所讨论的对象 Octagon 是对象 GeometricObject 的扩展 public class Octagon extends Geomet
我看到clone()在django代码中被广泛使用 queryset.query.clone() queryset.clone() 它的用途是什么?我应该模仿查询集或管理器方法中的行为吗? 最佳答案
我尝试导入 git project进入 eclipse 。手册告诉我在控制台中使用此命令: git clone http://git-wip-us.apache.org/repos/asf/mina-
我正在使用 jquery .clone(),它工作正常。但是我的问题是,当我克隆我的输入字段时,它也会克隆前一个字段的值。我不想克隆该值。我该如何克服这个问题? 这是我的代码 function add
在 this SO thread 中,结果表明,在制作项目副本方面,切片比任何方法都快。 使用: list1 = ['foo','bar'] copy1 = list1 * 1 list1.pop()
我有一个自动脚本可以解析服务器并克隆其中一个文件夹中的所有存储库。它所做的伪代码是: for each repo_name if a folder named like repo_name exi
我是一名优秀的程序员,十分优秀!