2017-08-09 103 views
5

聲納規則squid:S2384提出了一個問題,在此代碼:爲什麼返回this.variable不是一個漏洞?

public Date getCreatedOn() { 
    return createdOn; 
} 

以下規則Mutable members should not be stored or returned directly

我明白,我們不應該返回原來的,相反,我們應該返回對象的副本。

在另一方面,聲納不上這個代碼提出問題:

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

是什麼讓這個代碼有什麼不同?

我們沒有在第二種情況下返回原始副本嗎?

+4

基於您已發佈的兩個語句的代碼似乎idenitcal –

+0

他們是相同的,但聲納說,第一個1是脆弱的,但不是第二 – Vamsidhar

+0

無論它在聲納的錯誤,它的聲納的限制,或聲納相信「this.'是一種說法,」我真的打算這樣做,所以不要警告我「。 –

回答

9

這是SonarJava(SonarQube平臺中使用的Java靜態代碼分析器)如何檢測此問題的一種不足之處。我創建了以下票據以改進實施,以涵蓋使用this返回字段時的情況。

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

-2

您共享的代碼是相同的。但你分享的鏈接是不同的。

如果一個類具有引用類型的數據成員並且它是可變的,並且當我們直接返回時,我們引用同一個對象,所以它可以被修改。用另一個對象返回一個對象的值最好。

+3

這並不回答這個問題--OP在問爲什麼添加this.'有所作爲。 –

相關問題