簡體   English   中英

我應該避免使用 STATIC 變量嗎

[英]Should i avoid using STATIC vaiables

我正在我的辦公室中設計一個 java API(不是 API),其中包含 4000+ 個常量。 所以所有的團隊都可以直接使用它們。 最初我想根據他們的類型創建他們的類,並將他們的 static 對象創建到一個單獨的 class 中。 所以任何人都可以直接使用它們。

但是在閱讀了 static 變量的需要之后,我擔心創建這么多 static 變量可能是個問題。 有替代品嗎?

*在我之后加入這個項目的人也可以在我的常量 class 中添加一個約束,而不關心性能。 有可能很少使用許多常量。

*常量 class 的每個成員都將代表一個 class ,它會有自己的行為。 它可能是一些 inheritance 樹的一部分。 所以使用枚舉可能不是一個好主意。

您想創建一個可以容納 4000 多個常量的位置。 這個 class 的用戶有可能添加常量(可能在運行時)?

  • 對 memory 靜力學問題的擔憂是錯誤的。 如果您需要 4000 個值,它們將不得不存在於某個地方,對嗎?

  • 如果人們將在運行時添加值,這聽起來像是某種 singleton Map 或屬性(這實際上只是一種 map)。 人們經常使用像 Spring 或 Guice 這樣的依賴注入框架來管理這類事情。

  • 如果您只是想添加編譯常量,您可以將它們全部設為 static。 您可能還想讓它們 static 最終化,它們將被內聯編譯。

  • 4000 個常量很可能是一個非常糟糕的主意。 我見過在一個地方定義了大量常量(甚至超過 100 個)的系統,通常發生的情況是人們忘記了它們的定義並最終使用自己的變體,這有點違背了目的(例如, 我在一個系統上工作過,在“查詢”class 中定義了 100 個 SQL 查詢。當然人們會立即忽略它,因為如果您需要的確切查詢在那里而不是自己滾動,那么查找它更麻煩. class 最終增長到大約 1500 個查詢,許多完全重復和許多未使用,大多數使用一次。完全沒有意義)。 我可以想象一些例外情況,你不會通過命名約定“丟失”一些東西,但除非你有這樣的用例,否則這似乎是一個非常糟糕的主意。

  • 將常量分解為枚舉可為您提供類型安全的引用。 它還使事情在概念上更容易處理。 相比:

-

public class Constants { 
   String WORK_ADDRESS;
   String WORK_PHONE;
   String HOME_ADDRESS;
   String HOME_PHONE;
}

public enum ADRESS{ WORK, HOME }
public enum PHONE { WORK, PHONE }

您更願意與哪個合作?

性能極不可能成為這種設計的問題。 內存很便宜。 (提示通常的引用:過早的優化是萬惡之源。

另一方面,我不太確定任何客戶端開發人員如何能夠記住和使用 4000 多個常量。 你能告訴我們這是什么類型的 object 嗎?

根據您沒有提供給我們的詳細信息,您可能會發現將常量收集到enum中很有用。 如果有一些可以利用的自然分組,無狀態枚舉比public static final變量更容易理解。

當您在 static 中分配時會發生什么,它肯定不會在您的應用程序運行時被釋放。

所以呢?

如果您不創建它們 static 那么它們將在您的類的每個實例中復制。

你不想做的是設置 static 大量的數據,例如圖像或 GUI 一個圖像占用的不僅僅是幾個字段;

4000 個常量肯定是 int(4 個八位字節)= 16000 個八位字節,甚至不是圖標的大小 ^^

我會指出 hte Javadoc 來證明我的觀點

http://download.oracle.com/javase/1.4.2/docs/api/constant-values.html#java.awt.event.KeyEvent.CHAR_UNDEFINED

這是 Java 中的 KeyEvent 聲明,請查看聲明 ^^

除非您正在創建大型 arrays 或非常長的字符串,否則 4000 個數據值不會是很多 memory。 我認為您引用的那篇文章談論的是大量數據。

另一種方法是從首選項文件中讀取值。

也許常量被模塊化成一個類的集合,所以很少使用的常量只會按需加載。

暫無
暫無

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

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