通常在需要使用数据集合的时候,枚举便派上了用场。大多数情况下使用枚举的时候无意识的不会去修改里面的值。那么枚举中的值到底能不能修改呢? 答案是:一旦定义了枚举,最好不要妄图修改里面的值,除非修改是必要的。
今天遇到的问题就是和枚举相关的,因为之前并不知道枚的对象实际上是单例,导致了非常严重的问题
先看下代码
(1)定义的枚举:
public enum SquareAreaEnum {
CAROUSEL(new SquareAreaTemplate(1, "", false),
"carousel", I),
ICON(new SquareAreaTemplate(2, "", false,I),
"fullscale"),//用户定制部分
HEAD_LINE(new SquareAreaTemplate(3, "", false),
"headline",I),
}
这个枚举中的SquareAreaTemplate对象中有一个order属性,需要动态的获取
所以我便干了这样一件事:
(2)通过外部方法修改order值
public class SquareConfig {
public static List<SquareAreaEnum> getByIdentity(Ii ){
List<SquareAreaEnum> squares = Lists.newArrayList();
for(SquareAreaEnum squareAreaEnum : SquareAreaEnum.values()){
if(I.BOTH.equals(squareAreaEnum..getI())){
squares.add(squareAreaEnum);
}
}
//排序
int index = 0;
for(SquareAreaEnum squareAreaEnum : squares){
squareAreaEnum.getSquareAreaTemplate().setOrder(++index);
}
return squares;
}
}
那么问题来了,在测试的时候,order的值都是顺序拿到的,但是到了生产环境下,order就乱了。
问题的原因就在于,测试环境中只有一台服务器,一旦枚举被初始化以后任何时候去获取它都是固定的,但是生产环境下有多台服务器,拿到的不知道那台服务器上的值了。
相关推荐
java枚举类型的说说明,详细阐述了枚举类型的使用和注意事项
Java枚举的应用, 具体代码
使用Java枚举创建纸牌游戏“最高纸牌实验室” 建模最高纸牌游戏。 纸牌游戏实验室 本实验旨在为基本的纸牌游戏建模并实施规则。 我们并不是在寻找一款正在运行的游戏,而只是在寻找一款出色的TDD来证明该游戏...
使用 enum 关键字实现枚举注意事项 15 enum 用方法说明 15 enum 实现接口 15 注解的理解 16 基本的 Annotation 介绍 16 @Override 注解 16 @Override 使用说明 17 @Deprecated 注解 17 @SuppressWarnings 注解 17 元...
2.2.3 Java中的数组 2.3 绝对不要清除对象 2.3.1 作用域 2.3.2 对象的作用域 2.4 新建数据类型:类 2.4.1 字段和方法 2.5 方法、自变量和返回值 2.5.1 自变量列表 2.6 构建Java程序 2.6.1 名字的可见性 2.6.2 使用...
2.2.3 Java中的数组 2.3 绝对不要清除对象 2.3.1 作用域 2.3.2 对象的作用域 2.4 新建数据类型:类 2.4.1 字段和方法 2.5 方法、自变量和返回值 2.5.1 自变量列表 2.6 构建Java程序 2.6.1 名字的可见性 2.6.2 使用...
Java5以后开始支持枚举类型,枚举类型使用起来非常方便,其重要的作用是作为类型安全使用的。如果在不考虑系统内存开销的情况下大量的使用枚举也不会有什么问题。但是移动端还是需要注意的。 android系统在应用启动...
5.8.1 使用继承的注意点 155 5.8.2 利用组合实现复用 156 学生提问:使用组合关系来实现复用时,需要创建两个Animal对象,是不是意味着使用组合关系时系统开销更大? 159 5.9 初始化块 159 5.9.1 使用初始化块 ...
031311_【第13章:Java类集】_Map接口使用的注意事项笔记.pdf 031312_【第13章:Java类集】_IdentityHashMap类笔记.pdf 031313_【第13章:Java类集】_SortedMap类笔记.pdf 031314_【第13章:Java类集】_集合工具类:...
2.2.3 Java中的数组 2.3 绝对不要清除对象 2.3.1 作用域 2.3.2 对象的作用域 2.4 新建数据类型:类 2.4.1 字段和方法 2.5 方法、自变量和返回值 2.5.1 自变量列表 2.6 构建Java程序 2.6.1 名字的可见性 2.6.2 使用...
第4~9章重点针对jdk api的使用提出了80条建议,例如字符串的拼接方法该如何选择、枚举使用时有哪些注意事项、出现nullpointerexception该如何处理、泛型的多重界限该如何使用、多线程编程如何预防死锁,等等;...
2.2.3 Java中的数组 2.3 绝对不要清除对象 2.3.1 作用域 2.3.2 对象的作用域 2.4 新建数据类型:类 2.4.1 字段和方法 2.5 方法、自变量和返回值 2.5.1 自变量列表 2.6 构建Java程序 2.6.1 名字的可见性 2.6.2 使用...
2.2.3 Java中的数组 2.3 绝对不要清除对象 2.3.1 作用域 2.3.2 对象的作用域 2.4 新建数据类型:类 2.4.1 字段和方法 2.5 方法、自变量和返回值 2.5.1 自变量列表 2.6 构建Java程序 2.6.1 名字的可见性 2.6.2 使用...
比如,switch的空指针问题、浮点数的比较、无泛型限制引起的类型混乱、加锁与解锁的注意事项、YYYY的日期格式问题等; 2)修改描述112处。比如,IFNULL的判断方式、集合的toArray的数组长度、日志占位符的处理等; 3...
掌握在Java程序中使用final关键字的基本技巧。 理解final关键字在构造方法、类、方法和变量等不同位置的应用。 了解final关键字的一些规则,如final变量的初始化、final方法的重写和final类的继承等。 阅读建议: ...
2.2.3 Java中的数组 2.3 绝对不要清除对象 2.3.1 作用域 2.3.2 对象的作用域 2.4 新建数据类型:类 2.4.1 字段和方法 2.5 方法、自变量和返回值 2.5.1 自变量列表 2.6 构建Java程序 2.6.1 名字的可见性 2.6.2 使用...
比如,switch的空指针问题、浮点数的比较、无泛型限制引起的类型混乱、加锁与解锁的注意事项、YYYY的日期格式问题等; 2.修改描述112处。比如,IFNULL的判断方式、集合的toArray的数组长度、日志占位符的处理等; ...
比如,switch的空指针问题、浮点数的比较、无泛型限制引起的类型混乱、加锁与解锁的注意事项、YYYY的日期格式问题等; 2.修改描述112处。比如,IFNULL的判断方式、集合的toArray的数组长度、日志占位符的处理等; ...