使用 clone() 方法来拷贝一个对象即复杂又有风险,它会抛出异常,并且还需要类型转换。Effective Java 书上讲到,最好不要去使用 clone(),可以使用拷贝构造函数或者拷贝工厂来拷贝一个对象。

    1. public class CloneConstructorExample {
    2. private int[] arr;
    3. public CloneConstructorExample() {
    4. arr = new int[10];
    5. for (int i = 0; i < arr.length; i++) {
    6. arr[i] = i;
    7. }
    8. }
    9. public CloneConstructorExample(CloneConstructorExample original) {
    10. arr = new int[original.arr.length];
    11. for (int i = 0; i < original.arr.length; i++) {
    12. arr[i] = original.arr[i];
    13. }
    14. }
    15. public void set(int index, int value) {
    16. arr[index] = value;
    17. }
    18. public int get(int index) {
    19. return arr[index];
    20. }
    21. }
    CloneConstructorExample e1 = new CloneConstructorExample();
    CloneConstructorExample e2 = new CloneConstructorExample(e1);
    e1.set(2, 222);
    System.out.println(e2.get(2)); // 2