【问题标题】:Clone a 2d array克隆一个二维数组
【发布时间】:2013-10-31 19:10:56
【问题描述】:

您好,我有一个名为 Ladrilo 的类,在另一个类中我有一个二维数组类型 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 类上添加一些东西,但我还没有弄清楚。 谢谢!

【问题讨论】:

  • 不起作用:是什么意思?请具体说明您面临的具体问题,您期望什么以及目前正在发生什么?

标签: java arrays multidimensional-array clone


【解决方案1】:

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();
    }
  }
}

【讨论】:

    【解决方案2】:

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

    What is a copy constructor in C++?

    【讨论】:

    • 我在用java什么是拷贝构造函数?
    猜你喜欢
    • 2014-04-19
    • 2021-10-06
    • 2020-05-11
    • 2019-05-09
    • 2013-11-23
    • 2014-01-08
    • 2013-04-17
    • 1970-01-01
    相关资源
    最近更新 更多