Java clazz.clone的新clazz(此)是否存在风险?
在构建中断后,一位开发人员抱怨说,这是因为以前可用的Java clazz.clone的新clazz(此)是否存在风险?,java,clone,Java,Clone,在构建中断后,一位开发人员抱怨说,这是因为以前可用的Clazz.clone()(不是类的真实名称:)已被删除,因此他对clz.clone()的调用正在中断 之后,claz的作者建议将客户端代码更改为使用newclazz(clz)\ 执行clone方法返回new Clazz(this)是否存在风险?会出什么问题?我不认为这样做有风险,但这是不必要的。让你的一个开发者改变他的函数调用 // this is the same var myClazz = thatClazz.clone(); // a
Clazz.clone()
(不是类的真实名称:)已被删除,因此他对clz.clone()
的调用正在中断
之后,claz
的作者建议将客户端代码更改为使用newclazz(clz)
\
执行
clone
方法返回new Clazz(this)
是否存在风险?会出什么问题?我不认为这样做有风险,但这是不必要的。让你的一个开发者改变他的函数调用
// this is the same
var myClazz = thatClazz.clone();
// as this
var myClazz = new Clazz(thatClazz);
新方法使用了一种叫做复制构造函数的东西,在我看来,它比使用.clone()看起来更干净
此外,应该与您的开发团队讨论如何修改其他模块依赖的代码。任何非私有的方法或属性在更改之前都应该检查引用。我不认为这样做有风险,但这是不必要的。让你的一个开发者改变他的函数调用
// this is the same
var myClazz = thatClazz.clone();
// as this
var myClazz = new Clazz(thatClazz);
新方法使用了一种叫做复制构造函数的东西,在我看来,它比使用.clone()看起来更干净
此外,应该与您的开发团队讨论如何修改其他模块依赖的代码。任何非私有的方法或属性在更改之前都应该检查引用。主要区别在于克隆是一个方法,构造函数是一个构造函数 这意味着
Clazz x = ...;
Object xClone = x.clone()
返回x.getClass()克隆返回的任何方法:Clazz对象或Clazz子类的对象。将此与
Clazz x = ...;
Object xCopy = new Clazz( x );
这将为您提供一个Clazz对象,即使x引用子类扩展Clazz
大概这对“Clazz的作者”来说并不重要。主要区别在于克隆是一种方法,构造函数是一种构造函数 这意味着
Clazz x = ...;
Object xClone = x.clone()
返回x.getClass()克隆返回的任何方法:Clazz对象或Clazz子类的对象。将此与
Clazz x = ...;
Object xCopy = new Clazz( x );
这将为您提供一个Clazz对象,即使x引用子类扩展Clazz
据推测,这对“Clazz的作者”来说并不重要。互联网上有很多关于克隆与复制构造函数的讨论,例如 添加克隆方法会起作用,但既然这都是内部代码,为什么还要引入额外的复杂性呢 听起来你可以用一个过程来处理破坏性的变化。可能只是做一些简单的事情,比如将克隆标记为不推荐使用一段时间,让开发人员有机会停止使用它
我看到人们浪费了数小时试图在内部API上保持向后兼容性,而更多的时间在争论像这样的琐碎更改。互联网上有很多关于克隆与复制构造函数的讨论,例如 添加克隆方法会起作用,但既然这都是内部代码,为什么还要引入额外的复杂性呢 听起来你可以用一个过程来处理破坏性的变化。可能只是做一些简单的事情,比如将克隆标记为不推荐使用一段时间,让开发人员有机会停止使用它
我曾看到人们花费数小时试图在内部API上保持向后兼容性,并花费更多时间争论像这样的琐碎更改。@DmitryGinzburg如果
Clazz
是var
的子类型,那么它就是Java,不是吗?这是真的,但我认为它仍然解决了问题的各个方面。clone()的好处在于它是多态的,复制构造函数不是@DmitryGinzburg如果Clazz
是var
的子类型,那么它就是Java,不是吗?这是真的,但我认为它仍然解决了问题的要素。clone()的好处是它是多态的,而copy构造函数不是!有很多情况下,newclazz(x)
应该/不应该/返回子类,但却失败了。切片并不总是好的。现在我知道你不是。由于我特别要求在使用clone时存在风险,我可能误解了您对方法调用和构造函数调用之间的区别的描述,以暗示一些好处/损失分析有很多情况下,new Clazz(x)
应该/不应该/返回子类,而是失败。切片并不总是好的。现在我知道你不是。由于我是专门询问使用克隆的风险,我可能误解了您对方法调用和构造函数调用之间的区别的描述,从而暗示了一些收益/损失分析