switch识别枚举类型

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 属性,可以直接使用枚举常量,而不是调用方法

你可能感兴趣的:(java,前端,服务器)