当前位置:天才代写 > tutorial > JAVA 教程 > java克隆工具

java克隆工具

2017-11-13 08:00 星期一 所属: JAVA 教程 浏览:310

若需修改一个工具,同时不想改变挪用者的工具,就要建造该工具的一个当地副本。这也是当地副本最常见的一种用途。若抉择建造一个当地副本,只需简朴地利用clone()要领即可。Clone是“克隆”的意思,即建造完全一模一样的副本。这个要领在基本类Object中界说成“protected”(受掩护)模式。但在但愿克隆的任何衍生类中,必需将其包围为“public”模式。譬喻,尺度库类Vector包围了clone(),所以能为Vector挪用clone(),如下所示:
 

//: Cloning.java
// The clone() operation works for only a few
// items in the standard Java library.
import java.util.*;

class Int {
  private int i;
  public Int(int ii) { i = ii; }
  public void increment() { i++; }
  public String toString() { 
    return Integer.toString(i); 
  }
}

public class Cloning {
  public static void main(String[] args) {
    Vector v = new Vector();
    for(int i = 0; i < 10; i++ )
      v.addElement(new Int(i));
    System.out.println("v: " + v);
    Vector v2 = (Vector)v.clone();
    // Increment all v2's elements:
    for(Enumeration e = v2.elements();
        e.hasMoreElements(); )
      ((Int)e.nextElement()).increment();
    // See if it changed v's elements:
    System.out.println("v: " + v);
  }
} ///:~

clone()要领发生了一个Object,后者必需当即从头造型为正确范例。这个例子指出Vector的clone()要领不能自动实验克隆Vector内包括的每个工具——由于别名问题,老的Vector和克隆的Vector都包括了沟通的工具。我们凡是把这种环境叫作“简朴复制”可能“浅层复制”,因为它只复制了一个工具的“外貌”部门。实际工具除包括这个“外貌”以外,还包罗句柄指向的所有工具,以及那些工具又指向的其他所有工具,由此类推。这即是“工具网”或“工具干系网”的由来。若能复制下所有这张网,便叫作“全面复制”可能“深层复制”。
在输出中可看到浅层复制的功效,留意对v2采纳的动作也会影响到v:
 

v: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
v: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

一般来说,由于不敢担保Vector里包括的工具是“可以克隆”(注释②)的,所以最好不要试图克隆那些工具。

②:“可以克隆”用英语讲是cloneable,请寄望Java库中专门保存了这样的一个要害字。

 

    关键字:

天才代写-代写联系方式