public enum AggregationType {
LATEST,
COUNT,
SUM,
MIN,
MAX,
AVG,
INC
}
public enum AggregationType {
LATEST(1,"LATEST"),
COUNT(2,"COUNT"),
SUM(3,"SUM"),
MIN(4,"MIN"),
MAX(5,"MAX"),
AVG(6,"AVG"),
INC(7,"INC");
}
为什么switch能识别第一种而第二种就不行呢?
Java 中的 enum
类型有两种声明方式:一种是简单的枚举常量,另一种是带有字段和构造函数的枚举。您第一段代码使用的是简单的枚举常量,而第二段代码使用的是带有字段和构造函数的枚举。
在 switch
语句中,Java 可以直接识别简单的枚举常量。这是因为简单的枚举常量是唯一的且在编译时就可以确定的,它们本质上是整数值。
而带有字段和构造函数的枚举实例是对象,而不是简单的常量。在这种情况下,Java 编译器无法将其直接映射到整数值,因此不能在 switch
语句中使用。这也是为什么在这种情况下,需要在 enum
类型中提供一个唯一的标识符,然后在 switch
语句中使用该标识符。
在 switch
语句中,AggregationType.LATEST.getName()
是一个方法调用,而不是常量表达式。switch
语句要求表达式是常量表达式,即在编译时就能确定的值。方法调用不能在编译时确定,因此不能在 switch
语句中使用。
如果您想在 switch
语句中使用枚举的 name
属性,可以直接使用枚举常量,而不是调用方法