通常在需要使用数据集合的时候,枚举便派上了用场。大多数情况下使用枚举的时候无意识的不会去修改里面的值。那么枚举中的值到底能不能修改呢? 答案是:一旦定义了枚举,最好不要妄图修改里面的值,除非修改是必要的。
今天遇到的问题就是和枚举相关的,因为之前并不知道枚的对象实际上是单例,导致了非常严重的问题
先看下代码
(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
List
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就乱了。
问题的原因就在于,测试环境中只有一台服务器,一旦枚举被初始化以后任何时候去获取它都是固定的,但是生产环境下有多台服务器,拿到的不知道那台服务器上的值了。