【问题标题】:Vector Cloning Error载体克隆错误
【发布时间】:2014-03-11 21:06:46
【问题描述】:

我创建了自己的 Vector 类,称为 QueueExtendingVect,它由 CInteger 元素组成,其中 CInteger 是我自己的类。

在我的代码中,我试图覆盖 Object 的 clone() 方法来克隆 QueueExtendingVect,但不断出错。下面是代码:

public Object clone() {
  super.clone();
  QueueExtendingVect copy = (QueueExtendingVect) this.clone(); 

  for(int i = 0; i < this.size(); i++)
    copy.set(i, (CInteger) this.elementAt(i));
}

CInteger 类:

package csu.mcdonald;

public class CInteger implements Cloneable {
  private int i; 

  CInteger(int ii) { i = ii; }

  void setI(int ii) { i = ii; }

  int getI() { return this.i; } 

  public Object clone() { 
          return null; 
  }

  public String toString() { 
      Integer bigI = new Integer(this.i); 
      return bigI.toString(); 
  }

  public boolean equals(Object o) {
      if(this.i == ((CInteger)o).i)
          return true; 
      else
          return false;
  }
}

如何成功克隆 Vectors?谢谢:)

【问题讨论】:

  • 您遇到了什么错误? public Object clone() { 也没有返回任何东西,那是真正的代码吗?还应该将 super.clone() 分配给“复制”而不是 this.clone()
  • 对不起,我应该退回副本。我收到错误“克隆()不可见”。我不完全确定这意味着什么。

标签: vector clone


【解决方案1】:

应该够了

public Object clone() {
 //EDIT     QueueExtendingVect copy = new QueueExtendingVect(this.size());
 QueueExtendingVect copy = new QueueExtendingVect(this.size());

 for(int i = 0; i < this.size(); i++)
  copy.add(elementAt(i));
 return copy;
}

顺便说一句,它不是线程安全的。

编辑:修复越界问题

【讨论】:

  • 我没有看到 copy 是如何从调用 clone() 的实例中获取元素的。在我看来,副本中的每个单元格都被设置为该单元格中已经存在的任何内容。此外,在此分配中,没有将 Vector 初始化为特定大小的 QueueExtendingVect 构造函数。
  • copy.set(i, elementAt(i));表示副本的元素设置为“this”中“i”处的值。我知道你有 this.elementAt 但在这种情况下'this'是多余的。喜欢就用吧。
  • 你怎么知道 copy.set(i, elementAt(i));会引用这个元素吗?
  • 因为没有指定对象的方法调用总是在'this'上。如果它是copy.elementAt,那么它将在'copy'上工作,但由于它不是,它在'this'上工作。根据我的经验,'this' 最有必要区分同名的方法变量和类变量stackoverflow.com/questions/2411270/…
  • 我已重做该方法,但现在我不断收到 ArrayOutOfBoundsException。我不确定为什么会发生这种情况,因为我从来没有超过这个向量的大小。如何在这里重新发布代码?
猜你喜欢
  • 2011-06-29
  • 1970-01-01
  • 1970-01-01
  • 2011-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多