-3

如果我想克隆一个对象数组,但是数组中有一些空元素,如何实现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;
    }
}

这将引发空指针异常。如何修复这个错误?

4

2 回答 2

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. 因此,调用 clone onb将尝试在不存在的对象上调用 clone。

于 2013-03-05T08:13:22.173 回答
0

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

于 2013-03-05T08:35:27.353 回答