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就乱了。

问题的原因就在于,测试环境中只有一台服务器,一旦枚举被初始化以后任何时候去获取它都是固定的,但是生产环境下有多台服务器,拿到的不知道那台服务器上的值了。

猜你喜欢

转载自xiaoxiaoxuanao.iteye.com/blog/2314648