java 枚举使用中注意的问题
2016-09-18 13:58
253 查看
通常在需要使用数据集合的时候,枚举便派上了用场。大多数情况下使用枚举的时候无意识的不会去修改里面的值。那么枚举中的值到底能不能修改呢? 答案是:一旦定义了枚举,最好不要妄图修改里面的值,除非修改是必要的。
今天遇到的问题就是和枚举相关的,因为之前并不知道枚的对象实际上是单例,导致了非常严重的问题
先看下代码
(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就乱了。
问题的原因就在于,测试环境中只有一台服务器,一旦枚举被初始化以后任何时候去获取它都是固定的,但是生产环境下有多台服务器,拿到的不知道那台服务器上的值了。
今天遇到的问题就是和枚举相关的,因为之前并不知道枚的对象实际上是单例,导致了非常严重的问题
先看下代码
(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中split使用应注意分隔符问题
- java实际开发中泛型使用需要注意的一些问题
- Java中 float、double使用注意问题
- Java split()方法使用注意问题
- Java float、double使用注意问题
- java中split使用应注意分隔符问题
- java中split(regex)使用中要注意的问题:正则表达式
- Java中使用同步关键字synchronized需要注意的问题
- java中使用堆外内存,关于内存回收需要注意的事和没有解决的遗留问题(等大神解答)
- 在windows开发环境中,java代码中使用linux格式路径的方法需要注意的问题
- java在使用实现了List接口时候应该注意的问题
- java中使用static修饰词应注意的问题
- 声明方法java实际开发中泛型使用需要注意的一些问题
- Java学习之运算符使用注意的问题
- 使用Spring的javamail注意的中文问题
- 在windows开发环境中,java代码中使用linux格式路径的方法需要注意的问题
- java中split(regex)使用中要注意的问题:正则表达式
- java中split(regex)使用中要注意的问题:正则表达式
- C#关于使用枚举遇到的问题----Parse()方法使用注意
- java使用String.split方法时要注意的问题