首頁  >  文章  >  Java  >  程式碼異味 - 集合別名

程式碼異味 - 集合別名

WBOY
WBOY原創
2024-08-30 06:01:02989瀏覽

公開您的收藏集結合您的解決方案

TL;DR:使用不可變集合來防止意外的副作用。

問題

  • 不可預測的行為
  • 調試挑戰
  • 資料損壞
  • 違反最小驚訝原則
  • 過早優化
  • 意外突變
  • 併發問題
  • 線程安全受損
  • 增加耦合

解決方案

  1. 使用不可變集合
  2. 建立不可變類別
  3. 複製修改前的集合
  4. 避免收集吸氣劑
  5. 避免自動屬性
  6. 喜歡訊息隱藏和封裝

情境

當兩個或多個變數引用同一個物件時,就會發生別名。

這可能會導致意想不到的副作用,尤其是當一個變數修改共享物件時。

不可變集合在建立後無法更改,這有助於防止意外別名。

不成熟的最佳化者會認為複製集合是一項昂貴的操作,您應該避免。

這是物件別名的特殊情況

範例程式碼

錯誤的

public class MutableExample {
  public static void main(String[] args) {
    List<Integer> numbers = List.of(1, 2, 3);
    List<Integer> otherNumbers = numbers; // Aliasing
    otherNumbers.add(4);
    System.out.println(numbers); // Output: [1, 2, 3, 4]
  }
}

正確的

public class ImmutableExample {
  public static void main(String[] args) {
    List<Integer> numbers = List.of(1, 2, 3);
    List<Integer> otherNumbers = List.copyOf(numbers); // Creating a copy
    otherNumbers.add(4);
    System.out.println(numbers); // Output: [1, 2, 3]
  }
}

偵測

[X] 半自動

多個靜態分析工具可以警告您別名濫用。

標籤

  • 不變性

等級

[x] 中級

人工智慧世代

AI 程式碼產生器預設可能不會總是建立不可變對象,尤其是在使用可變集合時。

您可以提示他們優先考慮不可變集合並包裝現有集合以避免別名。

人工智慧檢測

人工智慧工具可以分析程式碼中潛在的別名問題,並建議使用不可變集合。

結論

您可以使用不可變集合來避免意外的副作用。

這將使您的程式碼更可預測且更易於推理。

關係

更多資訊

免責聲明

程式碼味道是我的觀點。

製作人員

照片由 Martino Pietropoli 在 Unsplash 上拍攝


如果一個物件是不可變的,它只能處於一種狀態,那麼你就贏了。

約書亞·布洛赫


本文是 CodeSmell 系列的一部分。

以上是程式碼異味 - 集合別名的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn