为什么要返回this.variable不是一个漏洞?

时间:2017-08-09 07:36:55

标签: java sonarqube this immutability

声纳规则squid:S2384在此代码中引发了一个问题:

public Date getCreatedOn() {
    return createdOn;
}

遵循规则Mutable members should not be stored or returned directly

我明白我们不应该返回原文,而是应该返回该对象的副本。

另一方面,Sonar没有就此代码提出问题:

public Date getCreatedOn() {
    return this.createdOn;
}

是什么让这段代码与众不同?

我们是否在第二种情况下没有退回原件?

2 个答案:

答案 0 :(得分:10)

SonarJava(SonarQube平台中使用的Java静态代码分析器)检测到此问题的方式存在缺陷。我创建了以下故障单以改进实现,以涵盖使用this返回字段时的情况。

https://jira.sonarsource.com/browse/SONARJAVA-2424

答案 1 :(得分:-2)

您分享的代码是相同的。但你分享的链接是不同的。

如果一个类具有引用类型的数据成员并且它是可变的,并且当我们直接返回时,我们引用相同的对象,因此可以修改它。最好用另一个对象返回一个对象的值。