TaoChuan1997 2021-01-07 16:11 采纳率: 0%
浏览 104

SonarQube扫描的一个关于cloneable的问题

一个类实现了cloneable接口但是并未没有Override clone()方法时会出现 Add a"clone" method to this class 的提示,但是加上clone方法后又会让你remove,这是为什么呢?谢谢。

  • 写回答

1条回答 默认 最新

  • RayCheungCode 优质创作者: 云计算技术领域 2023-05-16 15:03
    关注

    在SonarQube中,当一个类实现了Cloneable接口但没有重写clone()方法时,你会收到"Add a 'clone' method to this class"的提示。这是因为实现Cloneable接口会为类添加一个clone()方法的默认实现,但这个默认实现只是简单地进行浅拷贝(shallow copy),而不是实现真正的克隆功能。

    由于clone()方法的默认实现并不满足通常对于克隆操作的要求,因此SonarQube建议你重写clone()方法来实现自定义的克隆逻辑。

    然而,SonarQube还提供了一个有关clone()方法的规则(rule),它认为在现代的Java应用程序中,使用clone()方法进行对象克隆并不是一种良好的实践,因此建议尽量避免使用clone()方法。这是因为clone()方法在设计上存在一些问题,例如它是一个protected方法,无法强制实施克隆的语义,容易导致混乱和不一致的行为。

    所以,当你在类中添加了clone()方法后,SonarQube会发出警告建议你移除该方法并采用其他更好的方式来实现对象的复制或克隆操作。具体来说,可以使用拷贝构造函数(copy constructor)、工厂方法(factory method)或者使用其他库或框架提供的更可靠的克隆机制。

    评论

报告相同问题?