2012-07-14 28 views

回答

4

這是因爲如果您的對象不是Cloneable,則clone()方法會拋出CloneNotSupportedException

您應該看看documentation for clone()方法。

以下是clone()方法是如何在類Object聲明:

protected Object clone() throws CloneNotSupportedException 

注:

而且,它已經意識到Clone壞了。 This answer在這裏解釋爲什麼以及如何避免使用它。

1

製作Cloneable標記界面是一個錯誤。

也就是說,它所做的一件事是在Object中「啓用」clone()的默認實現。如果您沒有implement Cloneable,則調用super.clone()將拋出CloneNotSupportedException

+0

你能解釋爲什麼這是一個錯誤嗎? – 2012-07-14 07:27:03

+2

@MarkRotteveel Cloneable接口應該有一個克隆方法,並且Object中的受保護克隆方法不需要「激活」。現在的界面並沒有真正有用的用途,同時使用了一個好名字並導致了混亂。 – 2012-09-17 20:35:51

1

有人說這是從C++模仿拷貝構造函數的嘗試,但這裏在計算器上以前類似的問題吧:About Java cloneable

1

目的是在javadoc規定。它指定克隆這種類型的對象是允許的。

如果你的類依賴於內置的實施clone()(由Object.clone()方法提供的),那麼這個標記接口使場逐場克隆。 (如果您在沒有實現Cloneable的對象上調用內置克隆方法,您將得到一個CloneNotSupportedException。)

1

clone()方法的用途是創建一個對象的新實例(副本)調用。正如你在使用克隆方法的答案中看到的,你的類應該實現Cloneable接口。你可以選擇實現克隆的方式,你可以爲你的課程做淺層或深層複製。您可以看到示例http://javapapers.com/core-java/java-clone-shallow-copy-and-deep-copy/