出现场景:在枚举类中,定义一个私有静态变量,MAP来存储Enum中的全部值,而后在其余类中 使用这个静态变量的值...java
public enum DemoEnum { ELE_1(1, "元素1"), ELE_2(2, "元素2"), ELE_3(3, "元素3"); private int value; private String desc; private static Map<Integer, DemoEnum> MAP = new HashMap<>(); // 静态代码块 static { for (DemoEnum demoEnum : DemoEnum.values()) { MAP.put(demoEnum.getValue(), demoEnum); } } /** * 获取 静态 MAP的 keySet集合, * 并且remove keySet中变量 会移除MAP中的元素 * @return */ public static Set<Integer> getEnumValues(){ return MAP.keySet(); } /** * 把keySet 处理成List,就变成普通变量了, * 方法执行完毕就会销毁 * @return */ public static List<Integer> getEnumValueList(){ List<Integer> integerList = Arrays.asList(MAP.keySet().toArray(new Integer[MAP.size()])); ArrayList<Integer> list = new ArrayList<>(); for (Integer integer : integerList) { list.add(integer); } return list; } DemoEnum(int value, String desc) { this.value = value; this.desc = desc; } public int getValue() { return value; } public void setValue(int value) { this.value = value; } public String getDesc() { return desc; } public void setDesc(String desc) { this.desc = desc; } }
public class ApplicationTest3 { public static void main(String[] args) { // Set 集合中的值 [1, 2, 3] for (int i = 1; i < 3; i++) { test1(i); } } public static void test1(Integer var) { // List<Integer> enumValues = DemoEnum.getEnumValueList(); // 使用这个方法时,每次进来时size都=3 Set<Integer> enumValues = DemoEnum.getEnumValues();// 第一次进来时size=3,第二次进来是size=2 if (var % 2 != 0) { enumValues.remove(Integer.valueOf(1)); } else { enumValues.remove(Integer.valueOf(2)); } System.out.println(enumValues); // 输出的元素 只有一个 } }
注意要点: static 变量在内存中只存在一份, 对Map.keySet() 操做 一样会对Map产生影响this
MAP是静态的,Set<Integer> values = MAP.keySet() 指向的一样是static MAP。 把Set<Integer> values 转换成List能够解决两次操做的都是同一变量的问题...code