从此Artima article on clone vs copy constructor:
对象的克隆方法非常棘手。它基于现场副本,和 这是“超语言”。它创建一个对象而不调用a 构造函数。无法保证它保留不变量 由建设者建立。有很多错误 多年来,无论是在孙内外,都源于如果你这样的事实 只需要反复调用super.clone直到你克隆了一个 对象,你有一个浅层的对象副本。
Joshua Bloch对语言外的意思是什么?
答案 0 :(得分:9)
他的意思是“超出Java范围”。
特别是在Java中,创建新对象的“正确”方法是使用该Object的构造函数。许多类编写者依赖于这个假设和代码逻辑到他们的构造函数中 - 比如输入验证或者你想在构造时保证的任何其他东西 - 这就是他所谓的“由构造函数建立的不变量”。但是克隆绕过了这个基本约束并创建了一个内存副本而没有调用构造函数 - 因此它是“额外的语言”。
技术上,序列化也是如此。
答案 1 :(得分:0)
可能它不是用Java实现的,但它在Object类中有一个本机。
答案 2 :(得分:0)
语言外对象创建机制(除了调用或链接构造函数之外的其他意义)是: