[英]Static final field in a class vs Interface field in java
我需要在我的應用程序中創建 100 個或更多靜態最終常量,根據我的理解,我可以通過以下兩種方式實現:
class
並在其中創建static
final
字段static
final
我在上述方法中有這些問題:
您可以參考許多有關該主題的書籍。
我會引用一個很好的:“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.