通用枚举类/常量类

204 阅读2分钟

一:通用常量类

1:常量类实现

public class DemoConstant {
//普通常量
    public static final String configName = "外观";
    public static final Integer count = 4000;
    public static final char SEPARATE_COMMA = ',';
    public static final char SEPARATE_COLON = ':';
    public static final char SEPARATE_SPACE = ' ';
    //list常量
    public static final List<Integer> constantList = Arrays.asList(344, 345);
    //map常量
    public static final Map<String,String> immutableMap = new ImmutableMap.Builder<String,String>() 
    .put("k1","v1") 
    .put("k2","v2") 
    .build();
    //set常量  
    public static final  Set<Integer> constantSet = new HashSet<Integer>(Arrays.asList(1,2));
   
}

2:调用实现

System.out.println(DemoConstant.configName);
System.out.println(DemoConstant.constantSet.contains(1));
System.out.println(DemoConstant.constantMap.getOrDefault(1, ""));

3:知识点

o:一般一个项目或者某一个比较大的业务模块可以维护一个常量类 a:final表示该变量的值不会改变-换句话说,一个变量的值在声明后不能修改。
b:被static修饰的变量,叫静态变量或类变量;静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便)
c:Guava提供的ImmutableMap是一个支持多线程环境下面的安全的Map,ImmutableMap中key和value均不能为null,放入null值会抛出NPE
d:Map.getOrDefault(Object key, V defaultValue)方法的作用是:当Map集合中有这个key时,就使用这个key值;如果没有就使用默认值defaultValue。

二:通用枚举类

1:枚举类实现


@Getter
public enum DemoEnum {

    DEMO_A(0, "name","desc",Lists.newArrayList(1,2))),

    DEMO_B(2 ,"name2" , "desc2" ,Lists.newArrayList(3,4));

    private final int id;
    private final String name;
    private final String desc;
    private final List<Integer> list;
    
   DemoEnum(int id, String name, String desc, List<Integer> list) {
        this.formulaId = formulaId;
        this.formulaName = formulaName;
        this.formulaContents = formulaContents;
        this.saleTypes = saleTypes;
    }
//of方法通过id获得枚举
    public static DemoEnum of(int id) {

        for (DemoEnum demoenum : DemoEnum.values()) {
            if (demoenum.getFormulaId() == formulaId) {
                return demoenum;
            }
        }
        return DemoEnum.DEMO_A;
    }
    //ofName方法通过id获得name
     public static DemoEnum ofName(int id) {

        for (DemoEnum demoenum : DemoEnum.values()) {
            if (demoenum.getFormulaId() == formulaId) {
                return demoenum.getName();
            }
        }
        return DemoEnum.DEMO_A.getName();
    }
    //ofList方法通过list返回枚举配置的list枚举
    public static List<DemoEnum> ofList(List<Integer> saleTypes) {
        List<DemoEnum> result = Lists.newArrayList();
        for (DemoEnum demoenum : DemoEnum.values()) {
            for (Integer saleType : saleTypes) {
                if (demoenum.getSaleTypes().contains(saleType)) {
                    result.add(demoenum);
                }
            }
        }
        return result.stream().distinct().collect(Collectors.toList());
    }
}