JAVA代碼格式 Google-java-format VS AlibabaP3C

IDE 配置模板文件說明:\color{red}{新增基于Google格式的xml配置文件}

文檔:java代碼格式化模板(阿里代碼規(guī)范)
地址:http://www.reibang.com/p/9befe7710176

基于項(xiàng)目需要,調(diào)研規(guī)范java格式翘狱,基于 Alibaba P3C 和 Google 做一個簡單對比

Google:
文檔:https://google.github.io/styleguide/javaguide.html
源碼:https://github.com/google/google-java-format
安裝:Idea或Eclipse插件
安裝文檔:無需文檔疆前,裝插件就好
阿里巴巴:
文檔&源碼:https://github.com/google/google-java-format
安裝:Idea插件 + eclipse-code-format.xml 模板文件
安裝文檔:http://www.reibang.com/p/9befe7710176

優(yōu)缺點(diǎn)對比

配置:

Google: 縮進(jìn)轰驳、換行之類目前全是代碼里固定的简卧,不提供配置文件槽畔,自定義支持不友好哲银。不過目前已經(jīng)很好看了
Alibaba: 基于 eclipse-codestyle.xml 莱没,配置較靈活初肉,同時(shí)也很麻煩

具體代碼對比示例(自行決定使用哪一個)

  1. 行開始縮進(jìn) Google 2 Alibaba 4

  2. 換行縮進(jìn) 都是4

  3. 單行塊注釋

    Google:
      /** 外部估值數(shù)據(jù) */
    Alibaba: 
        /**
         * 外部估值數(shù)據(jù)
         */
    
  4. 換行邏輯:
    Google 優(yōu)先 "=" 后換行,"." "(" 后換行 饰躲,優(yōu)先級從左往右:= . (
    Alibaba 到哪哪換行

    Google:
      private static final Set<String> ADJUSTSTS_TODETAIL =
          new HashSet<>(
              Arrays.asList(
                  "1002", "1021", "1031", "1221", "1207", "2001", "2203", "2204", "2221", "2232",
                  "3003"));
    Alibaba:
        private static final Set<String> ADJUSTSTS_TODETAIL = new HashSet<>(Arrays.asList("1002",
            "1021", "1031", "1221", "1207", "2001", "2203", "2204", "2221", "2232", "3003"));
    
  5. 代碼塊換行:Google 在 "{" 后換行

    Google:
      private static final String[][] ADJUSTSTS_4001 = {
        {"104", "400101"},
        {"104A", "40010A"},
        {"104B", "40010B"},
        {"104C", "40010C"}
      };
    Alibaba:
        private static final String[][] ADJUSTSTS_4001 = {{"104", "400101"},
            {"104A", "40010A"},
            {"104B", "40010B"},
            {"104C", "40010C"}
        };
    
  6. 參數(shù)換行:Google 在 "(" 后換行牙咏,如果1行不足,會每個單數(shù)獨(dú)占一行 (方法定義和調(diào)用一致)

    Google:
      public ValuationCheckProcess_Google(
          int productNum, long tradeDate, boolean needCallBack, boolean processCheckFlag) {}
    Alibaba:
        public ValuationCheckProcess_AlibabaP3C(int productNum, long tradeDate, boolean needCallBack,
            boolean processCheckFlag) {}
            
    Google:
      public ValuationCheckProcess_Google(
          int productNum,
          long tradeDate,
          Map<String, BSide_EV_Valuation> valuationMap,
          Map<String, BSide_EV_ValuationTotal> valuationTotalMap) {}
    Alibaba:
        public ValuationCheckProcess_AlibabaP3C(int productNum, long tradeDate,
            Map<String, BSide_EV_Valuation> valuationMap,
            Map<String, BSide_EV_ValuationTotal> valuationTotalMap) {}
    
    Google:
        return ProcessUtil.getProcessStatus(
            tradeDate,
            productNum,
            isAsset ? EvaluationConst.ASSET_EV_PROCESS : EvaluationConst.EV_PROCESS_CHECK,
            EvaluationConst.EV_Process_check_2,
            EvaluationConst.ev_status_3);
    Alibaba:
            return ProcessUtil.getProcessStatus(tradeDate, productNum,
                isAsset ? EvaluationConst.ASSET_EV_PROCESS : EvaluationConst.EV_PROCESS_CHECK,
                EvaluationConst.EV_Process_check_2, EvaluationConst.ev_status_3);
    
  7. Lambda表達(dá)式:

    Google:
        uncheckOuterData =
            uncheckOuterData.entrySet().stream()
                .filter(map -> !map.getKey().startsWith(defineL1))
                .collect(Collectors.toMap(h -> h.getKey(), h -> h.getValue()));
    Alibaba:
        uncheckOuterData = uncheckOuterData.entrySet().stream()
            .filter(map -> !map.getKey().startsWith(defineL1))
            .collect(Collectors.toMap(h -> h.getKey(), h -> h.getValue()));
    Google:
        uncheckOuterData =
            uncheckOuterData.entrySet().stream()
                .filter(
                    map ->
                        map.getKey().length() > 4
                            || (map.getKey().length() == 4
                                && String.valueOf(map.getKey().charAt(3)).matches("[0-9]")))
                .collect(Collectors.toMap(h -> h.getKey(), h -> h.getValue()));
    Alibaba:
        uncheckOuterData = uncheckOuterData.entrySet().stream()
            .filter(map -> map.getKey().length() > 4 || (map.getKey().length() == 4
                && String.valueOf(map.getKey().charAt(3)).matches("[0-9]")))
            .collect(Collectors.toMap(h -> h.getKey(), h -> h.getValue()));
    Google:
        Map<String, BSide_EV_Subject> filterSubjects =
            allSubjects.values().stream()
                .filter(
                    e ->
                        !ParaChecker.isNull(e.getStkId())
                            && e.getSubjectlevel() == 4
                            && e.getSubjectAttrId().toUpperCase().indexOf("INVESTAPPRECIATION") == -1)
                .collect(Collectors.toMap(e -> e.getSubjectId(), e -> e));
    Alibaba:
        Map<String,
            BSide_EV_Subject> filterSubjects = allSubjects.values().stream()
                .filter(e -> !ParaChecker.isNull(e.getStkId()) && e.getSubjectlevel() == 4
                    && e.getSubjectAttrId().toUpperCase().indexOf("INVESTAPPRECIATION") == -1)
                .collect(Collectors.toMap(e -> e.getSubjectId(), e -> e));
    
  8. 邏輯判斷:

    Google:
        if (MathUtil.round(inner.getStkValue(), 4) != MathUtil.round(outer.getStkValue(), 4)
            || (!subject.equals("1109")
                && MathUtil.round(inner.getPostCostAmt(), 4)
                    != MathUtil.round(outer.getPostCostAmt(), 4))) {}
    Alibaba:
        if (MathUtil.round(inner.getStkValue(), 4) != MathUtil.round(outer.getStkValue(), 4)
            || (!subject.equals("1109") && MathUtil.round(inner.getPostCostAmt(), 4) != MathUtil
                .round(outer.getPostCostAmt(), 4))) {}
    Google:            
        if (subject.length() > 8
            && !subject.startsWith("1202")
            && !subject.startsWith("2202")
            && !onlyCheckStkValue(inner)
            && MathUtil.round(inner.getPostQtyF(), 4) != MathUtil.round(outer.getPostQtyF(), 4)) {}
    Alibaba:
        if (subject.length() > 8 && !subject.startsWith("1202")
            && !subject.startsWith("2202") && !onlyCheckStkValue(inner)
            && MathUtil.round(inner.getPostQtyF(), 4) != MathUtil.round(outer.getPostQtyF(), 4)) {}
    
  9. 三目運(yùn)算:

    Google:
        EvaluationUtil.recordEVProcess(
            productNum,
            tradeDate,
            isAsset
                ? EvaluationConst.ASSET_EV_PROCESS
                : checkValueType == EvaluationConst.CHECKVALUETYPE_1
                    ? EvaluationConst.EV_PROCESS_REALTIME
                    : EvaluationConst.EV_PROCESS_CHECK,
            checkValueType == EvaluationConst.CHECKVALUETYPE_1
                ? EvaluationConst.EV_Process_realtime_19
                : EvaluationConst.EV_Process_check_3,
            ev_status,
            beginTime,
            endTime,
            diff,
            flag,
            evaluationType,
            null);
    Alibaba:
        EvaluationUtil.recordEVProcess(productNum, tradeDate,
            isAsset ? EvaluationConst.ASSET_EV_PROCESS
                : checkValueType == EvaluationConst.CHECKVALUETYPE_1
                    ? EvaluationConst.EV_PROCESS_REALTIME : EvaluationConst.EV_PROCESS_CHECK,
            checkValueType == EvaluationConst.CHECKVALUETYPE_1
                ? EvaluationConst.EV_Process_realtime_19 : EvaluationConst.EV_Process_check_3,
            ev_status, beginTime, endTime, diff, flag, evaluationType, null);
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末妄壶,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子寄狼,更是在濱河造成了極大的恐慌丁寄,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件泊愧,死亡現(xiàn)場離奇詭異伊磺,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)删咱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進(jìn)店門奢浑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人腋腮,你說我怎么就攤上這事雀彼。” “怎么了即寡?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵徊哑,是天一觀的道長。 經(jīng)常有香客問我聪富,道長莺丑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任墩蔓,我火速辦了婚禮梢莽,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘奸披。我一直安慰自己昏名,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布阵面。 她就那樣靜靜地躺著轻局,像睡著了一般洪鸭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上仑扑,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天览爵,我揣著相機(jī)與錄音,去河邊找鬼镇饮。 笑死蜓竹,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的储藐。 我是一名探鬼主播梅肤,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼邑茄!你這毒婦竟也來了姨蝴?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤肺缕,失蹤者是張志新(化名)和其女友劉穎左医,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體同木,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡浮梢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了彤路。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片秕硝。...
    茶點(diǎn)故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖洲尊,靈堂內(nèi)的尸體忽然破棺而出远豺,到底是詐尸還是另有隱情,我是刑警寧澤坞嘀,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布躯护,位于F島的核電站,受9級特大地震影響丽涩,放射性物質(zhì)發(fā)生泄漏棺滞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一矢渊、第九天 我趴在偏房一處隱蔽的房頂上張望继准。 院中可真熱鬧,春花似錦矮男、人聲如沸移必。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽避凝。三九已至舞萄,卻和暖如春眨补,著一層夾襖步出監(jiān)牢的瞬間管削,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工撑螺, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留含思,地道東北人。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓甘晤,卻偏偏與公主長得像含潘,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子线婚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法遏弱,類相關(guān)的語法,內(nèi)部類的語法塞弊,繼承相關(guān)的語法漱逸,異常的語法,線程的語...
    子非魚_t_閱讀 31,623評論 18 399
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理游沿,服務(wù)發(fā)現(xiàn)饰抒,斷路器,智...
    卡卡羅2017閱讀 134,652評論 18 139
  • 黑色的海島上懸著一輪又大又圓的明月,毫不嫌棄地把溫柔的月色照在這寸草不生的小島上眯勾。一個少年白衣白發(fā)枣宫,悠閑自如地倚坐...
    小水Vivian閱讀 3,106評論 1 5
  • 漸變的面目拼圖要我怎么拼模叙? 我是疲乏了還是投降了歇拆? 不是不允許自己墜落, 我沒有滴水不進(jìn)的保護(hù)膜范咨。 就是害怕變得面...
    悶熱當(dāng)乘涼閱讀 4,244評論 0 13
  • 感覺自己有點(diǎn)神經(jīng)衰弱故觅,總是覺得手機(jī)響了;屋外有人走過渠啊;每次媽媽不聲不響的進(jìn)房間突然跟我說話输吏,我都會被嚇得半死!一整...
    章魚的擁抱閱讀 2,172評論 4 5