Joshua Bloch用语言外的意思是什么意思?

Gee*_*eek 9 java clone effective-java

这篇关于克隆与复制构造函数的 Artima文章:

Object的clone方法非常棘手.它基于现场副本,而且是"超语言".它创建一个对象而不调用构造函数.无法保证它保留构造函数建立的不变量.多年来,在Sun内外都存在许多错误,这源于这样一个事实,即如果你只是反复调用super.clone直到克隆了一个对象,那么你就拥有了一个浅层的对象副本.

Joshua Bloch用语言外的意思是什么意思?

rad*_*dai 9

他的意思是"超出Java范围".

特别是在Java中,创建新对象的"正确"方法是使用该Object的构造函数.许多类编写者依赖于这个假设和代码逻辑到他们的构造函数中 - 比如输入验证或者你想在构造时保证的任何其他东西 - 这就是他所谓的"由构造函数建立的不变量".但克隆绕过这个基本约束并创建一个内存副本而不调用构造函数 - 因此它是"额外的语言".

从技术上讲,序列化也是如此.