如何在java中包含null元素时克隆数组

时间:2013-03-05 07:57:10

标签: java arrays nullpointerexception clone

如果我想克隆一个对象数组,但是数组中有一些null元素,如何实现clone()方法?例如:

class A {};

class B implements Cloneable {
    A[] arrayFoo = new A[maxNumber];
    // let some elements in arrayFoo be null
    // now I want to implement a clone method
    public B clone() throws CloneNotSupportedException {
        B result = (B) super.clone()
        return result;
    }
}

这将抛出空指针异常。如何解决这个错误?

2 个答案:

答案 0 :(得分:1)

试试这个(它不会抛出NullPointerException):

class A {};


class B implements Cloneable {
    public static final int MAX_NUMBER = 42;
    A[] arrayFoo = new A[MAX_NUMBER];
    // let some elements in arrayFoo be null
    // now I want to implement a clone method
    public B clone() throws CloneNotSupportedException {
        B result = (B) super.clone();
        return result;
    }



    public static void main(String[] args) throws CloneNotSupportedException {
        B b1 = new B();
        B b2 = b1.clone();

        System.out.println("Done!");
    }
}

<强>结论: 当您发布这样的问题时,总是确切地指定发生NullPointerException的代码行,并且总是确保在问题中发布该特定行。


我的猜测(如果您来自C ++背景)是您在仅声明为的成员变量上调用clone:

B b;

这将抛出NullPointerException,但不是因为clone实现。 B b;不会在Java中实例化任何内容。它只是声明一个可以指向B对象的引用。但是引用初始化为null。因此,在b上调用clone会尝试在不存在的对象上调用clone。

答案 1 :(得分:0)

克隆数组会执行浅层复制,并且可以正确复制空值。它不会产生任何NullPointerException,除非数组变量本身为null。