これを試してください(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
呼び出すことは、存在しないオブジェクトに対してクローンを呼び出そうとすることになります。