V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
nodododo
V2EX  ›  Java

静态常量解析枚举类问题

  •  
  •   nodododo · May 26, 2022 · 1317 views
    This topic created in 1438 days ago, the information mentioned may be changed or developed.
        public static final Map<Integer, List<CrmDetailViewEnum>> DEFAULT_VIEW  = new HashMap<Integer, List<CrmDetailViewEnum>>()
        {
            private static final long serialVersionUID = -4318860703552426339L;
            {
                put(SHORTCUT_BAR_TYPE, Arrays.asList(CrmDetailViewEnum.CALL_PHONE,CrmDetailViewEnum.SEND_MSG,
                        CrmDetailViewEnum.SEND_QQ, CrmDetailViewEnum.SEND_EMAIL));
                put(INFO_BAR_TYPE, Arrays.asList(CrmDetailViewEnum.INFO,
                        CrmDetailViewEnum.PHONE_NUM, CrmDetailViewEnum.WECHAT, CrmDetailViewEnum.QQ,
                        CrmDetailViewEnum.EMAIL, CrmDetailViewEnum.CONTACT_BOOK, CrmDetailViewEnum.GUEST));
                put(APPLICATION_BAR_TYPE, Arrays.asList(CrmDetailViewEnum.CONTACT,CrmDetailViewEnum.ORDER,
                        CrmDetailViewEnum.TASK, CrmDetailViewEnum.FILE, CrmDetailViewEnum.EXTEND_APPLICATION));
            }
        };
    

    关于 list 里面的 values 全是 null ,我猜测是加载顺序的问题,但是我不知道解决办法;

    目前我采用了两种

    1

        //初始化类
        private static CrmDetailViewEnum crmDetailViewEnum;
    

    2

    public static final Map<Integer, List<CrmDetailViewEnum>> DEFAULT_VIEW;
    
        static {
            DEFAULT_VIEW = new HashMap<Integer, List<CrmDetailViewEnum>>()
            {
                private static final long serialVersionUID = -4318860703552426339L;
                {
                    put(SHORTCUT_BAR_TYPE, Arrays.asList(CrmDetailViewEnum.CALL_PHONE,CrmDetailViewEnum.SEND_MSG,
                            CrmDetailViewEnum.SEND_QQ, CrmDetailViewEnum.SEND_EMAIL));
                    put(INFO_BAR_TYPE, Arrays.asList(CrmDetailViewEnum.INFO,
                            CrmDetailViewEnum.PHONE_NUM, CrmDetailViewEnum.WECHAT, CrmDetailViewEnum.QQ,
                            CrmDetailViewEnum.EMAIL, CrmDetailViewEnum.CONTACT_BOOK, CrmDetailViewEnum.GUEST));
                    put(APPLICATION_BAR_TYPE, Arrays.asList(CrmDetailViewEnum.CONTACT,CrmDetailViewEnum.ORDER,
                            CrmDetailViewEnum.TASK, CrmDetailViewEnum.FILE, CrmDetailViewEnum.EXTEND_APPLICATION));
                }
            };
        }
    
    

    这两种一起使用的,然后成功了,不为 null 了,但是不太懂原理,所以想请教一下各位大佬原因

    Supplement 1  ·  May 27, 2022
    本地是可以的,但是云环境可能是有路径问题解析类的时候顺序不一致为 null 。本地我自测是没问题的
    nodododo
        1
    nodododo  
    OP
       May 26, 2022
    来个大手子解决一下疑问把 呜呜呜好难啊
    RedBeanIce
        2
    RedBeanIce  
       May 27, 2022
    ```java
    import com.alibaba.fastjson.JSON;

    import java.util.Collections;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;

    public class For {
    public static final Map<Integer, List<TempEnum2>> DEFAULT_VIEW = new HashMap<Integer, List<TempEnum2>>() {
    private static final long serialVersionUID = -4318860703552426339L;
    {
    put(1, Collections.singletonList(TempEnum2.ADDRESS));
    put(2, Collections.singletonList(TempEnum2.ADDRESS));
    put(3, Collections.singletonList(TempEnum2.URL));
    }
    };
    public static void main(String[] args) {
    System.out.println(JSON.toJSONString(DEFAULT_VIEW));
    }
    }
    enum TempEnum2 {
    ADDRESS(""),
    URL("");
    private String pptFromDetail;
    TempEnum2(String pptFromDetail) {
    this.pptFromDetail = pptFromDetail;
    }
    }
    ```

    第一种情况是没问题的,打印正常

    {1:["ADDRESS"],2:["ADDRESS"],3:["URL"]}
    nodododo
        3
    nodododo  
    OP
       May 27, 2022
    @RedBeanIce 我本地试了确实正常,但是发到测试环境后的日志显示除了 key 是有数据的,枚举类全是 null
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2423 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 04:40 · PVG 12:40 · LAX 21:40 · JFK 00:40
    ♥ Do have faith in what you're doing.