Tag: 克隆

可以使用构造函数克隆方法创建对象

我一直认为clone()创建一个对象而不调用构造函数。 但是,在阅读Effective Java Item 11:明智地覆盖克隆时 ,我发现了一个声明 “没有被称为构造函数”的规定过于强大。 一个行为良好的克隆方法可以调用构造函数来创建正在构建的克隆内部的对象。 如果类是final,clone甚至可以返回由构造函数创建的对象。 有人可以向我解释一下吗?

为什么clone()是复制数组的最佳方法?

这对我来说是一种耻辱,但我不知道: 您应该使用clone来复制数组,因为这通常是最快的方法。 正如Josh Bloch在本博客中所述: http : //www.artima.com/intv/bloch13.html 我总是使用System.arraycopy(…) 。 这两种方法都是原生的,所以可能没有深入了解我无法弄清楚的库的来源,为什么会如此。 我的问题很简单:为什么它是最快的方式? System.arraycopy什么区别? 这里解释了不同之处,但它没有回答为什么Josh Bloch认为clone()是最快的方法。

用Java实现卡片组

所以我有一个实验室(我们被允许寻求外界的帮助,所以我在这里经过多次努力)我们必须实施一副卡片。 我们必须使用枚举类来创建num 适合西装: public enum Suits { CLUBS, HEARTS, DIAMONDS, SPADES } 对于数字: public enum Numerals { DEUCE(2), THREE(3), FOUR(4), FIVE(5), SIX(6), SEVEN(7), EIGHT(8), NINE(9), TEN(10), JACK(11), QUEEN(12), KING(13), ACE(14); } 我的卡类非常简单,但我不确定这两个代码块: public int compareTo (Card aCard){ if (aCard.aNumeral.equals(this.aNumeral) && aCard.aSuit.equals(this.aSuit)){ return 0; } else { return -1; } } 和 public boolean equals (Card […]

java中可克隆接口的用途是什么?

实现可克隆接口有什么用,因为它是一个标记接口? 我总是可以在我的类中创建一个公共Object clone()方法。 可克隆接口的实际目的是什么?

为什么要在Java中重写clone方法

关于在我想要克隆对象的类中重写克隆方法,我很困惑。 对象类具有受保护的对象方法,并且根据受保护的行为,即当方法受到保护时,它只能由类本身,类的子类或与类相同的包中的类访问 。 由于Java中的每个类都从Object扩展,因此它应该具有克隆方法,但我们仍然被迫覆盖克隆。 为什么需要它? 另外,我在某些地方读过覆盖克隆对象并将其公开。 我想知道,为什么会这样? 欢迎所有答案。

在Java中深度克隆多维数组……?

我有两个多维数组(实际上它们只是2D),它们具有推断的大小。 我如何深度克隆它们? 这是我到目前为止所得到的: public foo(Character[][] original){ clone = new Character[original.length][]; for(int i = 0; i < original.length; i++) clone[i] = (Character[]) original[i].clone(); } 等于original.equals(clone);测试original.equals(clone); 吐出一个假的。 为什么? :|

Java克隆抽象对象

我想知道是否有任何方法可以做到以下几点。 我有一个抽象类, Shape ,以及它的所有不同的子类,我想重写克隆方法。 我想在方法中做的就是从当前的toString()创建一个新的Shape 。 显然我不能做以下因为Shape是抽象的。 还有另一种方法可以做到这一点,因为在每个子类中重写克隆只是为了简单的名称更改似乎没用。 public abstract class Shape { public Shape(String str) { // Create object from string representation } public Shape clone() { // Need new way to do this return new Shape(this.toString()); } public String toString() { // Correctly overriden toString() } }

如何从Java中的Random中获取种子?

我正在为某个对象创建一个深层克隆。 该对象包含一个Random 。 从Random检索种子是一种好习惯吗? 如果是这样,怎么样? 没有Random.getSeed() 。

深度复制图形结构

我有一个带有Node的图表类,其中每个Node都可以连接到其他节点: public class Node { List connections; } 我想对整个图表进行深度复制。 作为第一次尝试,我尝试制作一个复制构造函数,如: public Node(Node other) { connections = new ArrayList(); for (Node n : other.connections) { connections.add(new Node(n)); } } 如此深入复制图形只会是: public Graph deepCopy () { Graph g = new Graph(); g.nodes = new ArrayList(); for (Node n : nodes) { g.nodes.add(new Node(n)); } } 但这不起作用,因为它破坏了节点之间的连接关系。 我想知道是否有人建议以简单的方式做到这一点? […]

克隆GregorianCalendar的最快方法?

我正在尝试制作一个对象的深层副本,包括GregorianCalendar实例。 我总是担心使用clone()并且它似乎没有在这里被覆盖,所以我只是按字段进行复制。 理想情况下,有一个复制构造函数,我可以这样使用: GregorianCalendar newCalendar = new GregorianCalendar(oldCalendar); 不幸的是我在API中找不到任何这样的function,并且试图弄清楚我需要哪些字段来获得精确的副本。 那么,要复制其中一个日历,你会怎么做? 我在这里错过了一些简单的捷径吗?