通常在需要使用数据集合的时候,枚举便派上了用场。大多数情况下使用枚举的时候无意识的不会去修改里面的值。那么枚举中的值到底能不能修改呢? 答案是:一旦定义了枚举,最好不要妄图修改里面的值,除非修改是必要的。
今天遇到的问题就是和枚举相关的,因为之前并不知道枚的对象实际上是单例,导致了非常严重的问题
先看下代码
(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枚举(Enum)状态机是一种使用枚举类型来实现状态转换逻辑的编程技术,它在Java编程中被广泛应用于管理对象的状态变化。状态机是一种模型,用于描述一个系统或对象在不同时间点可能存在的状态以及如何从一个状态...
Java枚举是面向对象编程中的一个重要特性,它用于定义固定的常量集合,这些常量通常代表某种特定的数据类型。在Java中,枚举提供了一种更安全、更规范的方式来处理常量,相比于传统的final static变量,枚举具有更多...
### Java 枚举类型详解 #### 一、引言 ...通过以上的介绍,我们可以看到Java枚举类型不仅提供了类型安全的保障,还为开发者带来了极大的灵活性。合理地使用枚举类型,可以显著提高代码的质量和可维护性。
在Java编程语言中,反射(Reflection)...反射与枚举的结合使用,可以为某些特定需求提供灵活的解决方案,但同时也需要注意滥用反射可能导致的性能问题和安全风险。在实际开发中,应谨慎使用反射,并确保遵循最佳实践。
Spring Boot 枚举使用的坑整理 Spring Boot 枚举使用的坑整理是指在使用 Spring Boot 枚举时可能出现的一些问题和解决方法的...只有注意这些坑,才能正确地使用枚举类型,在 Spring Boot 应用程序中避免出现问题。
Java枚举的默认值是从0开始的整数序列,如示例中的Color枚举。然而,我们可以通过自定义构造函数为每个枚举实例赋予特定的值,如Direction枚举中通过`private Direction(String name)`构造函数实现了对枚举值的定制...
Java枚举类型的注意事项: * 枚举类型的构造器应该是私有的 * 枚举类型的成员变量应该是final的 * 枚举类型的静态方法应该是public的 通过本文的实例,我们可以看到Java手动方式创建枚举类的方法和相关操作技巧。...
Java枚举默认支持序列化,但需要注意的是,枚举类的实例是唯一的,序列化和反序列化不会改变枚举实例的引用。 9. **枚举的常量工厂** 如果需要在枚举初始化时执行特定操作,可以使用枚举常量工厂方法,但这需要...
### Java枚举详解 在Java编程语言中,枚举(`enum`)是一种特殊的类,用于定义一组固定的常量值。这些常量值通常代表了一组预定义的选项或者状态,比如颜色、方向等。使用枚举可以提高代码的可读性和可维护性,并且...
在 switch 语句中使用 Java 枚举类型时,需要注意以下几点: 1. 枚举类型不能直接作为 switch 语句的条件,因为枚举类型不是基本类型。 2. 在 switch 语句中,不能使用枚举类型的名称作为 case 语句的值,例如:`...
Java中的枚举是一种特殊的类,它提供了一种安全的...枚举的使用应当遵循良好的编程实践,如避免在枚举中包含过多的业务逻辑,保持枚举常量的简洁性,以及利用枚举提供的各种方法和特性来提升代码的可读性和可维护性。
Java枚举是编程中一种非常重要的数据类型,它主要用于定义一组固定的、有限的状态或值,通常用来表示一组具有明显意义的常量。在Java中,枚举是在JDK 1.5版本引入的新特性,目的是为了提高代码的可读性和安全性。 ...
值得注意的是,枚举类型本质上是一个特殊的类,它继承自`java.lang.Enum<E>`。这意味着枚举类型可以拥有构造函数、方法和属性,就像任何其他类一样。 #### 枚举的实现机制 当编译上述枚举时,Java编译器会生成一个...
在 Java 中使用 Hyperscan 可以显著提高正则表达式的处理速度,但需要注意正确地管理 JNI 绑定和系统资源。通过熟练掌握 Hyperscan 的 API 和 Java 的 JNI,你可以构建出高效、可靠的应用程序。
当然,也可以使用`@Enumerated(EnumType.STRING)`保存枚举的名称,但请注意这可能会增加数据库存储空间。 此外,还可以创建一个枚举类型转换器,以便在数据库查询时能够根据枚举名称进行匹配: ```java public ...
在 Java 中,枚举类可以定义一些属性和方法,不同之处是:enum 不能使用 extends 关键字继承其他类,因为 enum 已经继承了 java.lang.Enum(java 是单一继承)。成员方法可以直接操作成员变量,比如 score,并且得到...
需要注意的是,在Java中定义枚举时,每个枚举常量的名称通常遵循大写字母的命名规则,并且每个常量之间用逗号分隔。此外,最后一个枚举常量后面的分号是可以省略的,这与类的定义有所不同。 #### 二、枚举类型的...
Java API文档是Java开发者的重要参考资料,它包含了Java开发工具包(JDK)中的所有类、接口、方法和常量的详细说明。这份中文网页版的Java API文档为中国的开发者提供了便利,无需通过英文版本来学习和查找API信息,...
在使用这些反编译工具时,需要注意版权和法律问题。除非你有权利访问和分析代码,否则反编译他人的软件可能违反版权法。在开发和学习过程中,合理使用反编译工具可以帮助理解代码结构和逻辑,但应始终尊重知识产权。...
### JAVA中的枚举类型2:高级特性 #### 概述 枚举类型是Java语言中一个非常实用且灵活的功能。通常情况下,我们将其用于表示一组固定的常量集合,如一周中的几天、颜色选项等。然而,Java中的枚举类型远不止于此。...