【问题标题】:Can not resolve "May expose internal representation by returning reference to mutable object"无法解决“可能通过返回对可变对象的引用来公开内部表示”
【发布时间】:2017-11-27 08:18:54
【问题描述】:

SonarQube 不断报告规则“可能通过返回对可变对象的引用而暴露内部表示”的问题。

我根据guide of the Carnegie Mellon University 修复了它,但 SonarQube 仍然提出了这个问题:

public Date getDatime(){
    return (Date)this.datime.clone();//IJTI-316
    // .getDatime() may expose internal representation by returning *.datime
}

我该如何解决/避免这个问题?

【问题讨论】:

  • 您使用哪个版本的 SonarQube?您为 Java 分析安装了哪些插件?
  • 在 Eclipse 中,我使用的是 SonarLint。和 SonarQube 6.1 版

标签: java sonarqube


【解决方案1】:

克隆操作进行浅拷贝,这意味着 Date 的大部分实例变量在两个实例之间共享。要完全解决错误,您需要在常规意义上创建一个全新的对象。

也许:

return new Date(this.datime.getTime());

【讨论】:

  • set方法怎么样:this.datime = new Date(datime.getTime());它仍然保留这个问题!
  • 当然可以,你只是用另一个内部表示替换你的内部表示并返回它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-15
  • 1970-01-01
  • 2018-01-01
  • 2014-01-06
  • 2013-09-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多