如果我想克隆一个对象数组,但是数组中有一些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;
}
}
这将抛出空指针异常。如何解决这个错误?
答案 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。