java枚舉運用

來源:互聯網
上載者:User

標籤:就會   code   ret   做了   ring   effect   而且   ati   問題   

0.背景

情境是這樣的,用戶端要發送JSON資料到達服務端解析,由於用戶端的不同版本更新,打過來的資料有差異,服務端要相容這種差異對不同的處理這些資料,因為用戶端升級是由使用者決定的。

1.思路

實現的方式肯定很多種,恰好學到《effective java》中的枚舉,枚舉可以加一個方法,我們這個情境每一種日誌格式就對應於一種解析的方法。

public enum LogVersion {    OLD(0),NEW(1){        @Override        public String parseLog(JSONObject jsonObject) {            return jsonObject.toString() + "new";        }    };    private final int num;    private LogVersion(int num) {        this.num = num;    }    public String parseLog(JSONObject jsonObject) {        return jsonObject.toString();    }    public static void main(String[] args) {        JSONObject jsonObject = new JSONObject();        String oldVersionLog = OLD.parseLog(jsonObject);        String newVersionLog = NEW.parseLog(jsonObject);        System.out.println(oldVersionLog);        System.out.printf(newVersionLog);    }}

當然,項目中實現的邏輯比這個複雜得多。但是,這樣做就好嗎?極致的代碼都在追求:擴充性、複用性、效能。如果用戶端再發一個版本,我們在裡面重寫解析方法就好;當很多不同類型的用戶端覺得這個處理邏輯很相似,需要複用這個LogVersion的處理,這樣就會帶來問題,首先是命名我們命得不好,另外是把不同的用戶端日誌放在同一個Enum中處理並不是那麼的優雅,而且邏輯上我們本來就應該想辦法把他分開。如何來擴充這個Enum? 

1.0 enum是什嗎?

enum就是一個類,只不過這個類編譯器額外的幫我們做了一些事情:

1.enum會自動繼承Enum<T>這個類;由於java不支援多繼承,這個類被聲明成enum就不能再繼承其他類了,所以這就是enum 不能用繼承來擴充的原因。

2.enum變數編譯器會偷偷的在前面加 public static final

1.1 如何擴充enum

根據1.0中的第一點,我們只能用介面來擴充,以達到代碼邏輯結構清晰的目的。

 //todo

reference

 https://www.zhihu.com/question/51987179/answer/128434410

java枚舉運用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.