java 中常數的定義方式。
我想大声告诉你
我想大声告诉你 2017-06-12 09:19:32
0
2
916
public class EnumDome {

    public static final String SUCCESS = "Y";

    public static final String FAIL = "N";

    enum State{

        SUCCESS("Y"),
        FAIL("N");

        private final String state;

        State(String state){
            this.state = state;
        }

        public String getState(){
            return state;
        }
    }
}

這兩種定義常數的方式各有什麼特色?在使用過程中更建議使用何種方式?

我想大声告诉你
我想大声告诉你

全部回覆(2)
phpcn_u1582

這個問題,從文法層面來說,沒有什麼懸念。百度一下常數和枚舉的差別就好了。

但是從設計角度上來說,"enum" 要優於 "static final" 的。

這麼說可能比較抽象,我舉個例子:例如我定義了一個公有函數(更準確的說是公有方法)叫 setResponseState

一種是這樣定義的:setResponseState(String state) { ... },使用字串作為參數。

一種是這樣定義的:setResponseState(EnumDemo.State state) { ... },使用枚舉作參數。

對於第一種定義,正確的呼叫方式是:setResponseState(EnumDemo.SUCCESS);

但是如果這麼呼叫:setResponseState("abcd"); 是不是在 JAVA 語言的語法上也沒問題呢?

編譯器走到這裡還是可以通過的…但在運行期可能會導致嚴重的錯誤,降低系統的可靠性。

這裡的最大問題就是 "函數參數不夠明確",這會對使用這個方法的開發人員造成困擾。他必須去回查我的源碼,才能最終確定到底要傳一個什麼樣的參數給我…

而再假如,這個函數(方法)被我封裝到一套框架程式碼中,不提供原始碼,那麼開發人員回查起來就更困難了。這會降低開發效率。

而使用 setResponseState(EnumDemo.State state) { ... } 這樣的定義方式,是非常明確的。要嘛是 SUCCESS,要嘛是 FAIL,再要嘛是 null。

開發人員呼叫這個函數(方法)幾乎不會出錯,也根本不需要回查原始碼。

所以比較嚴謹的做法是使用枚舉。當然這是在定義公共函數(方法)的時候。

而如果 setResponseState 是一個私有函數(方法),那麼可以稍微隨意一些,使用字串參數也是可以的。必定這種 "不嚴謹" 只暴露給內部。

形像一點的,就是對外我們要顯得非常專業,而對內,可以稍微降低一下標準。

這是常數和枚舉的兩個不同應用場景,希望對你有幫助……

世界只因有你

簡單的說:
只有 static final 是定義常數的方法。 後面那個不是,不過功能上是相似的。具體用那個還是取決於你的需求

深入地說:
貼地​​址:

Java 語言中 Enum 類型的使用介紹
Java枚舉類型(enum)簡介

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!