Student student = createSampleStudent();
List<Student> studentList= new ArrayList<Student>();
for(int i = 0; i < 5; i++) {
student.setId(getRandomId());
studentList.add(student);
}
我想用不同的ID将学生添加到studentList中。我无法在for循环中创建学生,因为创建一个学生需要太长的时间。我发现有一个克隆方法,但学生对象有许多字段(其中大多数引用另一个对象)。有什么想法吗?
我只是告诉你一个令人毛骨悚然的复制对象的方法,你一定不能在生产代码中使用它,但我认为它将是工作的。你可以使用不安全的,太阳的后门。您所需要做的就是获得不安全实例:
Field f = Unsafe.class.getDeclaredField("theUnsafe");
f.setAccessible(true);
Unsafe unsafe = (Unsafe) f.get(null);
忽略您的IDE,它将警告您访问限制,但如果您运行此代码,一切都将正常工作。如果错误很烦人,忽略首选项中的错误。在此之后,您可以在低级内存复制上对对象进行复制。
private static long normalize(int value) {
if(value >= 0) return value;
return (~0L >>> 32) & value;
}
public static long sizeOf(Object object){
return getUnsafe().getAddress(
normalize(getUnsafe().getInt(object, 4L)) + 12L);
}
private static long toAddress(Object obj) {
Object[] array = new Object[] {obj};
long baseOffset = getUnsafe().arrayBaseOffset(Object[].class);
return normalize(getUnsafe().getInt(array, baseOffset));
}
private static Object fromAddress(long address) {
Object[] array = new Object[] {null};
long baseOffset = getUnsafe().arrayBaseOffset(Object[].class);
getUnsafe().putLong(array, baseOffset, address);
return array[0];
}
static Object shallowCopy(Object obj) {
long size = sizeOf(obj);
long start = toAddress(obj);
long address = getUnsafe().allocateMemory(size);
getUnsafe().copyMemory(start, address, size);
return fromAddress(address);
}
毕竟,您可以在for循环中调用以下构造:
Student student = createSampleStudent();
List<Student> studentList= new ArrayList<Student>();
for(int i = 0; i < 5; i++) {
student = MyUnsafeUtil.shallowCopy(student);
student.setId(getRandomId());
studentList.add(student);
}
问题内容: 如果克隆数组,我将使用 我想知道如何在nodejs中克隆对象。 问题答案: 对于不需要压缩每一滴性能的实用程序和类,我经常作弊,只是使用JSON执行深层复制: 这不是唯一的答案,也不是最优雅的答案。所有其他答案都应考虑成为生产瓶颈。但是,这是一个快速而肮脏的解决方案,非常有效,并且在大多数情况下(我会克隆属性的简单哈希值)很有用。
我有下面的java代码,当我稍后尝试访问MiscDoc对象时,它似乎是空的。我找不到答案。NotesDocument上的clone()方法。 if语句只被访问一次 我该如何解决这个问题
问题内容: 我想知道是否有任何方法可以执行以下操作。我有一个抽象类,及其所有不同的子类,我想覆盖clone方法。我要在方法中做的就是从当前方法中创建一个新方法。显然,由于抽象,我无法执行以下操作。还有另一种方法可以执行此操作,因为仅为了简单的名称更改而在每个子类中覆盖克隆似乎没有用。 问题答案: 您可以尝试使用反射: } 在clone()方法中,调用getClass()。因为ACloneble i
我有一个类来代表一个玩家的手牌。但是,我(在另一个类中)有一个数组列表,我想在其中表示一堆玩家手。问题是我不知道如何在多手牌的数组列表中将一张牌添加到手牌中。我有一个代表卡牌和一副牌的类,效果很好。我只是试图了解如何将对象添加到数组列表中的对象。谢谢!
问题内容: 我有一个我想退还的副本。 有一个具有以下签名的克隆方法: 调用此方法后,如何将返回的对象强制转换回? 问题答案:
本文向大家介绍如何实现对象克隆?相关面试题,主要包含被问及如何实现对象克隆?时的应答技巧和注意事项,需要的朋友参考一下 实现 Cloneable 接口并重写 Object 类中的 clone() 方法。 实现 Serializable 接口,通过对象的序列化和反序列化实现克隆,可以实现真正的深度克隆。