Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中包含空元素时如何克隆数组_Java_Arrays_Nullpointerexception_Clone - Fatal编程技术网

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

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

如果我想克隆一个对象数组,但数组中有一些空元素,如何实现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;
    }
}
这将引发空指针异常。如何修复此错误?

尝试此方法(它不会引发NullPointerException):

结论: 当您发布这样的问题时,始终指定NullPointerException发生在代码的哪一行,并且始终确保在问题中发布该特定行


我猜(如果你来自C++背景),你只调用一个成员变量上的克隆,只声明为:

B b;

这会引发NullPointerException,但不是因为克隆实现的缘故<代码>B不会在Java中实例化任何内容。它只声明一个可以指向
B
对象的引用。但是引用被初始化为
null
。因此,在
b
上调用clone将尝试在不存在的对象上调用clone。

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

您的代码无法编译…
class
not
class
实现
not
实现
,甚至在我修复它之后,它不会抛出
NullPointerException
您使用的java版本是什么@Iswanto@user1237575:我正在使用java 6您的上一个代码示例没有用java编译。数据成员和数组确实有默认初始化,但局部变量没有。@EyalSchneider抱歉。你说得对。您可能会认为,在try/catch块之外,我必须将输入/输出流初始化为null的所有时间都会使我们无法忽略这一事实。但不幸的是,它没有。我更新了答案,以反映类似但可编译的场景。
B b;