簡體   English   中英

List.of() 或 Collections.emptyList()

[英]List.of() or Collections.emptyList()

作為List.of(...) 或 Collections.unmodifiableList()的特例——Java 9 指向一個且不可變的列表的首選方式是什么?

繼續寫

Collections.emptyList();

或切換到

List.of();

Collections.emptyList()不需要為每次調用創建一個新對象; 就像在 OpenJDK中一樣,通常只返回單例EMPTY_LIST對象。 此外,更清楚的是,您打算表示一個空列表,而不是忘記填寫占位符。

使用emptyList() 它既更快(達到 Java 目標級別 1.9)又更具可讀性。

指向空且不可變列表的首選 Java 9 方式是什么?

差異相當微妙,因此“首選”取決於您想要實現的目標。 一些行為差異:

  • List.of將在contains(null)調用上引發異常。
  • 您可以反序列化 JDK 8 及之前版本的emptyList() ,但不能反序列化List.of

就或傳達您想要一個空列表而言, emptyList()可能看起來更好,但這只是一個臨時約定。 如果開發人員開始使用List.of() (比Collections.emptyList()短得多),那么它將成為一種已知和接受的方式,它只是新的。 如果你想一想,我們使用的一些結構並不總是能傳達它們自己所做的事情,但我們已經習慣了它們。

所以沒有嚴格的首選方式。 如果行為無關緊要,請使用您想要的任何東西。

  1. emptyList()創建一次新的空列表實例
  2. 可讀性沒有區別:也許List.of()Collections.emptyList()短,但您可以使用靜態導入,如import static java.util.Collections.emptyList; 然后只寫emptyList()

從 JDK 11 開始,如果查看源代碼,您會看到List.of()使用一次性初始化的空列表,類似於Collections.emptyList() 所以,我更喜歡使用List.of()因為:

  • 這是一個更新的 API。 所以,我認為如果 Java 維護者對以前的方式感到滿意,他們就不會添加新的 API。
  • 它更簡潔。
  • 如果你使用List.of(E... elements) (你應該) 來處理非空列表,你可以使用List.of()來處理空列表,享受統一的觀感,擺脫大部分工廠集合API 中的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM