静态常量解析枚举类问题

2022-05-26 20:02:11 +08:00
 nodododo
    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 了,但是不太懂原理,所以想请教一下各位大佬原因

931 次点击
所在节点    Java
3 条回复
nodododo
2022-05-26 20:02:34 +08:00
来个大手子解决一下疑问把 呜呜呜好难啊
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
2022-05-27 11:01:42 +08:00
@RedBeanIce 我本地试了确实正常,但是发到测试环境后的日志显示除了 key 是有数据的,枚举类全是 null

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/855526

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX