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

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

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

  • 写回答

1条回答 默认 最新

  • iRayCheung 云原生领域优质创作者 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)或者使用其他库或框架提供的更可靠的克隆机制。

    评论

报告相同问题?

悬赏问题

  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置