java 枚举使用中注意的问题

通常在需要使用数据集合的时候,枚举便派上了用场。大多数情况下使用枚举的时候无意识的不会去修改里面的值。那么枚举中的值到底能不能修改呢? 答案是:一旦定义了枚举,最好不要妄图修改里面的值,除非修改是必要的。

 

今天遇到的问题就是和枚举相关的,因为之前并不知道枚的对象实际上是单例,导致了非常严重的问题

先看下代码

(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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值