Java中通常如何管理常量

在Java中,常量是能夠在final class裏的,並不單單只是存在接口中。事實上,Java常量的使用通常有三種方式:java

1.接口中定義常量segmentfault

public interface Constants {
    int SEX_MALE = 1;
    int SEX_FEMAL = 2;
}

2.類中定義常量函數

public class Constants {
    public static final int SEX_MALE = 1;
    public static final int SEX_FEMAL = 2;
}

3.枚舉this

public enum Constants {
    SEX_MALE(1, "男"),SEX_FEMALE(2, "女");
    
    private int sex;
    private String field;
    
    Constants(int sex, String field){
        this.sex = sex;
        this.field = field;
    };

}

這三種方式其實均可以,也能在各個項目中看到這三種方式的身影,不存在什麼必定要怎樣怎樣的說法。不過估計這回答並非你想要的。若是要深究常量到底存放在哪好的話,無論什麼類型,其建立的目的只是爲了維護常量的話,實際上是不推薦使用接口的。儘管在接口中定義常量顯得更簡潔,由於不用寫public static final了嘛,但在《Effective Java》這本書中提到過:code

若是某個實現了常量接口的類被修改再也不須要常量了,也會由於序列化兼容緣由不得不保持該實現,並且非final類實現常量接口會致使全部子類被污染

同時書中也說到,接口應當只用於定義類型,不該該只用於導出常量。繼承

那麼另外兩種方式哪一個更「好」呢?這就要看使用場景了。接口

若是是簡單的共有常量定義,則強烈推薦枚舉,好比上面代碼演示的,只是簡單的常量標識。class

若是是複雜的常量,則能夠放在常量類裏管理:構造函數

// class的類型爲final,防止該類被繼承
public final class Constants {
    // 私有構造函數,避免該類被實例化
    private Constants() {}
    
    public static final String URL = "https://segmentfault.com/";
}
相關文章
相關標籤/搜索