Spotbugs 給出以下錯誤警告:
[錯誤] 中:MetaData.getCreatedAt() 可以通過在 MetaData.java:[第 21 行] EI_EXPOSE_REP 回傳 MetaData.createdAt [...MetaData] 來公開內部表示
為了解決這個問題,我認為我必須回傳“createdAt”的深層副本。
有沒有直接用@Data 解決這個問題的解決方案?
uj5u.com熱心網友回復:
不,沒有。原因是為每個類創建防御性副本是不同的,最好的方法取決于您的用例。龍目島無法知道您想要或需要什么。
例如,考慮具有可修改串列的可變類,即串列內容可能與getList()呼叫同時更改。在某些情況下,回傳Collections.unmodifiableList()反映可能同時發生的串列更改的 可能是合理的。在其他情況下,最好回傳一個永不更改的串列,例如通過創建串列的真實副本List.copyOf()。此外,如果串列中的物件也是可變的,您可能也需要克隆/復制這些物件。
所以如果你想回傳一個防御副本,你必須手動實作getter。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/480282.html
