0

您好,我有一个名为 Ladrilo 的类,在另一个类中,我有一个 2d 数组类型的 Ladrilo。我想克隆那个数组,这样如果原来的数组改变了这个数组就不会了。

根据我在我的 ladrilo 课上在线阅读的内容,我必须将 Implements 克隆。我这样做了,下面的代码没有用:

Ladrillo [][] copy=new Ladrillo[original.length][original.length];

for(int i=0;i<original.length;i++){
  for(int j=0;j<original.length;j++){
   Ladrillo newLadrillo=original[i][j].clone();
   copy[i][j]=newLadrillo;
 }}

关于改变什么的任何想法?我相信我必须在 Ladrilo 类上添加一些东西,但我还没有弄清楚。谢谢!

4

2 回答 2

0

您是否尝试过复制构造函数?您使用什么语言?

请参阅什么是 C++ 中的复制构造函数?

于 2013-10-22T18:56:05.423 回答
0

如果它的值不是基元,则 clone() 方法只会创建 Arrays 的浅表副本。对于深拷贝,您可以使用静态方法

java.lang.System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 

或在您的 Ladrilo 类中实现 clone() 方法。下面是一个名为 Player 的类的示例,该类具有两个字段,在调用 clone() 方法时应该复制这些字段。我们只是调用它的超类(即 Player 类的 java.lang.Object)clone() - 方法并将结果转换为 Player。

public class Player implements Cloneable {
   public String name;
   public int    age;

  @Override
  public Player clone() {
    try {
     return (Player) super.clone();
    }
    catch ( CloneNotSupportedException e ) { // its cloneable
     throw new InternalError();
    }
  }
}
于 2013-10-22T21:37:53.130 回答