V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
nodododo
V2EX  ›  Java

静态常量解析枚举类问题

  •  
  •   nodododo · 2022-05-26 20:02:11 +08:00 · 930 次点击
    这是一个创建于 913 天前的主题,其中的信息可能已经有所发展或是发生改变。
        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 了,但是不太懂原理,所以想请教一下各位大佬原因

    第 1 条附言  ·  2022-05-27 10:20:04 +08:00
    本地是可以的,但是云环境可能是有路径问题解析类的时候顺序不一致为 null 。本地我自测是没问题的
    nodododo
        1
    nodododo  
    OP
       2022-05-26 20:02:34 +08:00
    来个大手子解决一下疑问把 呜呜呜好难啊
    RedBeanIce
        2
    RedBeanIce  
       2022-05-27 10:00:01 +08:00
    ```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
       2022-05-27 11:01:42 +08:00
    @RedBeanIce 我本地试了确实正常,但是发到测试环境后的日志显示除了 key 是有数据的,枚举类全是 null
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   906 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 22:31 · PVG 06:31 · LAX 14:31 · JFK 17:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.