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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。