簡體   English   中英

類中的靜態最終字段與 Java 中的接口字段

[英]Static final field in a class vs Interface field in java

我需要在我的應用程序中創建 100 個或更多靜態最終常量,根據我的理解,我可以通過以下兩種方式實現:

  1. 創建一個簡單的 java class並在其中創建static final字段
  2. 創建一個接口並將所有變量放入其中,因為接口中的所有字段都是隱式static final

我在上述方法中有這些問題:

  1. 哪一種是實現這一目標的正確方法?
  2. 哪一種是內存高效的方法?
  3. 是否有任何設計模式可以實現這一目標?

您可以參考許多有關該主題的書籍。

我會引用一個很好的:“Effective Java”

第 19 條:僅使用接口來定義類型

常量接口模式是接口使用不當。 一個類在內部使用一些常量是一個實現細節。 實現一個常量接口會導致這個實現細節泄漏到類的導出 API 中。 類實現常量接口對類的用戶沒有任何影響

您甚至可以檢查 JDK 中大多數常量的聲明位置。

例如Math.PI在類 Math 中聲明,而不是在接口中

作為一個例外,您可以在java.io.ObjectStreamConstants 中看到類似的常量,但這些書籍同樣可以提供幫助:

再次從有效的java:

Java 平台庫中有幾個常量接口......

這些接口應被視為異常,不應進行仿真。

我不會考慮它們是否應該在接口或類中,而是更多關於常量及其含義。

我不建議為了將它們放在一起而將所有常量放在一個地方。 例如,如果一個常量與一個類直接相關,那么就會說把它放在那個類中。 我曾經使用過將所有常量捆綁到一個類中的代碼,我認為這不是一個好方法。

您是否考慮過使用 ENUM 的方法或它不適合您的情況? 我認為,使用 ENUM 的方法可以為您提供一些優於常量的好處。

為什么使用枚舉而不是常量?

我認為方便的方法是將它們放在一個地方,如果它們具有共同的性質。 無論如何,它們應該按某種屬性分組。 您可以像這樣為他們創建類:

public final class Consts {
    public static class GroupA {...}
    public static class GroupB {...}
    //and so on
}

通過組,這個類變得更具可讀性,並且更易於管理。 關於內存消耗,嘗試為常量使用原語,因為它們不需要額外的元信息空間。

您可以通過在接口類中聲明字段來隨意創建最終或靜態約束,因此我想使用您的選項編號 2

暫無
暫無

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

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