2 回答
TA贡献1824条经验 获得超8个赞
是否有任何东西阻止 Java 创建隐式复制构造函数,它会在所有成员上调用复制构造函数?
主要是这显然不是它应该做的事情。
在这种情况下,也许你想要一个深拷贝;在这种情况下,也许你想要一个浅拷贝;也许您根本不希望在另一种情况下复制实例;也许您希望以这些方式混合复制特定类的字段。
此外,添加此构造函数是另一种方法:在方法数量很重要的环境中(例如 Android 的 64k Dex 限制),您为不需要的东西付费。
如果需要,最好通过明确的方式让您这样做。
但是是什么阻止了Java 拥有这个呢?
鉴于您可以手动定义复制构造函数,自动添加它们在技术上显然是可行的。
我建议你不能这样做的一个原因是没有语言机制可以“删除”你不想被复制的类的构造函数。
很容易表明您不想要默认 ctor:只需使用任何签名定义您自己的 ctor。但是你不能对默认的复制 ctor 做同样的事情:根据定义,复制 ctor 只会有签名YourClass(YourClass instance)
;所以你不能要求,比如说,你定义一个抛出的显式复制ctor,因为你已经将编译时错误(不存在这样的ctor)更改为运行时错误(它存在,但抛出)。
因此,您必须开始发明额外的机制来删除构造函数——比如说,一个特殊的注释。但这需要更改工具来支持它。
从绝对意义上说,这并非不可能——但需要大量工作来更改语言以添加可以在现有语言中实现的功能。
TA贡献1836条经验 获得超4个赞
但确实如此。它是在类中调用clone()
并实现的方法Object
。
所以你想要做的,可以通过以下方式实现:
MyClass obj = new MyClass(); MyClass copy = (MyClass) obj.clone();
添加回答
举报