switch识别枚举类型
2024-01-02 11:41:20
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
属性,可以直接使用枚举常量,而不是调用方法
文章来源:https://blog.csdn.net/Enya61/article/details/135336034
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!