java中包含空元素时如何克隆数组
如果我想克隆一个对象数组,但数组中有一些空元素,如何实现clone()方法?例如:java中包含空元素时如何克隆数组,java,arrays,nullpointerexception,clone,Java,Arrays,Nullpointerexception,Clone,如果我想克隆一个对象数组,但数组中有一些空元素,如何实现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 CloneNot
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;
}
}
这将引发空指针异常。如何修复此错误?尝试此方法(它不会引发NullPointerException):
结论:
当您发布这样的问题时,始终指定NullPointerException发生在代码的哪一行,并且始终确保在问题中发布该特定行
我猜(如果你来自C++背景),你只调用一个成员变量上的克隆,只声明为:
B b;
这会引发NullPointerException,但不是因为克隆实现的缘故<代码>B代码>不会在Java中实例化任何内容。它只声明一个可以指向
B
对象的引用。但是引用被初始化为null
。因此,在b
上调用clone将尝试在不存在的对象上调用clone。克隆数组执行浅层复制,并且正确复制空值。它不会产生任何NullPointerException,除非数组变量本身为null。您的代码无法编译…class
notclass
,实现
not实现
,甚至在我修复它之后,它不会抛出NullPointerException
您使用的java版本是什么@Iswanto@user1237575:我正在使用java 6您的上一个代码示例没有用java编译。数据成员和数组确实有默认初始化,但局部变量没有。@EyalSchneider抱歉。你说得对。您可能会认为,在try/catch块之外,我必须将输入/输出流初始化为null的所有时间都会使我们无法忽略这一事实。但不幸的是,它没有。我更新了答案,以反映类似但可编译的场景。
B b;