克隆()的用例

Aad*_*mia 5 java clone

我从未见过在任何实际代码中使用clone()方法。我正在阅读有关它的内容,并认为它的使用会使代码变得非常麻烦。clone() 方法有什么具体的用例吗?在什么情况下必须使用clone()以及为什么使用普通构造函数还不够?

Rom*_*man 3

Josh Bloch 在Effective Java 中也不建议使用clone() 方法。

这种方法有几个问题:

  1. 如果可克隆对象不仅具有原始类型字段,而且还具有对象字段,则克隆对象将仅收到对这些对象的引用,而不是真正的克隆对象。为了避免这种情况,所有内部对象也应该是可克隆的。

  2. 如果您创建可克隆类的子类,那么它也是可克隆的(即使您不想)。这就是为什么您应该以正确的方式重写clone()方法以避免可能的问题。

何时应该使用它:尽可能不使用。您应该非常小心地使用它。如果您想要克隆的对象中的所有字段都是原始类型,那么这并不危险。在所有其他情况下,使用前请三思。

  • java的第一个版本发布得相当快。他们做出了伟大的工作,他们的许多决定都非常明智。但他们也犯了一些错误,比如java.util.Date类或clone()方法。如果它被添加到 API 中一次,他们就无法更改它。 (2认同)