首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么"final static int"可以用作switch的case常量而不是"final static <your enum>"

这个问答内容涉及到Java编程语言中的final static intenum类型,以及它们在switch语句中的使用。下面是完善且全面的答案:

final static int可以用作switchcase常量,而不是final static <your enum>,是因为switch语句在Java中允许使用整数类型的值作为case常量。final static int是一个常量,它的值在初始化后不能被修改,因此可以作为case常量使用。而enum类型是一种特殊的类,它表示一组有限的常量,每个常量都是一个对象。虽然enum类型也是不可变的,但是它的值是一个对象,而不是一个整数,因此不能直接用作switchcase常量。

如果你想使用enum类型作为switchcase常量,可以使用switchString类型,将enum类型转换为字符串,然后使用字符串作为case常量。例如:

代码语言:java
复制
enum Color {
    RED, GREEN, BLUE;
}

Color color = Color.RED;

switch (color.toString()) {
    case "RED":
        // do something
        break;
    case "GREEN":
        // do something
        break;
    case "BLUE":
        // do something
        break;
    default:
        // do something
        break;
}

需要注意的是,使用final static int作为switchcase常量可能会导致代码可读性不佳,因为case常量的含义不明确。因此,建议使用enum类型来表示一组有限的常量,以提高代码的可读性和可维护性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Java--Enum的思考

public class Plante { public static final int MERCURY = 1; public static final int VENUS = 2;...public static final int EARTH = 3; } 该模式的缺点有很多: 1....枚举类与其行为无法很好的绑定 枚举类与行为绑定的操作一般使用switch-case来进行操作,这模式有缺点,比如增加了一个新的枚举常量,但是switch-case中没有增加,这是常有的事情,因为switch-case...二方库里可以定义枚举类型,参数可以使用枚举类型,但是接口返回值不允许使用枚 举类型或者包含枚举类型的 POJO 对象。​​​​(这里返回值不可使用因为有反序列化的问题,那么为什么参数又可以使用呢?...枚举类与switch-case在外部搭配时要注意,当枚举类增加字段时就带来switch-case的更新问题,这种bug编译期间无法得知,最好的办法时把行为与枚举类绑定,或者把switch-case的逻辑统一写在该枚举类的内部

97640

Java基础15:深入剖析Java枚举类

常量 { } enum Color { Red, Green, Blue, Yellow } switch JDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强...EnumSet保证集合中的元素不重复;EnumMap中的 key是enum类型,而value则可以是任意类型。...枚举类型对象之间的值比较,是可以使用==,直接来比较值,是否相等的,不是必须使用equals方法的哟。....Day$1); static {}; } 可以看到,一个枚举在经过编译器编译过后,变成了一个抽象类,它继承了java.lang.Enum;而枚举中定义的枚举常量,变成了相应的public static...从Enum类中我们可以看到,为每个枚举都定义了两个属性,name和ordinal,name表示我们定义的枚举常量的名称,如FRIDAY、TUESDAY,而ordinal是一个顺序号,根据定义的顺序分别赋予一个整形值

68400
  • 【Java基本功】深入剖析Java枚举类的用法和原理

    常量 { } enum Color { Red, Green, Blue, Yellow } switch JDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强...EnumSet保证集合中的元素不重复;EnumMap中的 key是enum类型,而value则可以是任意类型。...枚举类型对象之间的值比较,是可以使用==,直接来比较值,是否相等的,不是必须使用equals方法的哟。....Day$1); static {}; } 可以看到,一个枚举在经过编译器编译过后,变成了一个抽象类,它继承了java.lang.Enum;而枚举中定义的枚举常量,变成了相应的public static...从Enum类中我们可以看到,为每个枚举都定义了两个属性,name和ordinal,name表示我们定义的枚举常量的名称,如FRIDAY、TUESDAY,而ordinal是一个顺序号,根据定义的顺序分别赋予一个整形值

    3.8K41

    java枚举类解读

    列出的实例系统会自动添加 public static final 修饰 必须在枚举类的第一行声明枚举类对象 JDK 1.5 中可以在 switch 表达式中使用Enum定义的枚举类的对象作为表达式...} } }  JDK1.8之后的switch语句支持byte,short,int,char,数组,enum类型,使用枚举,能让我们的代码可读性更强。...而且 Java 要求必须先定义 enum 实例。 覆盖枚举的方法  如:toString()方法覆盖,因此拿到枚举对象,直接打印输入此对象的信息而不是一个地址。...Enum类的主要方法  1.toString(): 返回当前枚举类对象常量的名称。...拿到枚举对象,直接打印输入此对象的信息而不是一个地址 enum Signal { GREEN, YELLOW, RED } public class test { public static

    19640

    Java 枚举

    那时候一般用接口常量来替代 而使用 Java 枚举类型 enum 可以更贴近地表示这种常量. 还可以配合 Switch使用… 枚举类的实现: JDK1.5 之前需要自定义枚举类....权限修饰符 必须在枚举类的第一行声明枚举类对象 JDK 1.5 中可以在 switch 表达式中使用Enum定义的枚举类的对象 作为表达式 case 子句可以直接使用枚举值的名字(无需添加枚举类作为限定...* */ System.out.println("enum switch用法"); switch (winter){ case...* 因为: enum类,是继承于 Java.lang.enum的,而不是 Object类 * */ // @Override // public String toString...类型本身并不具备安全性,假如某个程序员在定义int时少些了一个final关键字, 那么就会存在被其他人修改的风险,反观枚举类,它“天然”就是一个常量类,不存在被修改的风险。

    9710

    Java开发知识之Java的枚举

    枚举跟C++概念都是一样的.就是特定的常量而已. 二丶Java中的枚举     java中的常量.一般都是final定义.但是我们讲过.final定义的常量.初始化的时候可以每次给不同的值....例如:   public final static int a = 1;   public final static int b = 2;   public final static int c = 3...并且赋值其中一个枚举常量. 但是我们又有疑问了. 我们的枚举常量并没有初始化.但是为什么程序不出错.而且还打印了1; 原因是. 枚举常量.默认就是从0开始....} public static void doit(NUMBER c) { switch(c) { case N_NUMBER1:...五丶知识总结     1.定义枚举关键字       enum 名称{成员,成员};       1.枚举定义的成员. 默认都是 public static final 修饰的.

    82220

    Java之花样玩枚举

    = 1; public static final int ORDER_DEPOT_TIMOUT = 2; 然后接下来的业务逻辑就是用这些常量值来带指各种基本业务含义。...= 1; public static final int ORDER_LOGISTICS_ARRIVED = 2; 我想用上面三个状态的一个类型,而错误的输入称了下面的一个类型怎么办?...这些常量是static final类型的啊,在类加载的时候,如果有些地方使用了这样常量,在类加载的间接引用会直接编程常量引用的! 这个时候用枚举更好一些。...= 3; //值变化了 public static final int ORDER_DEPOT_TIMOUT = 2; 我们可以对枚举类进行丰富化操作,使用的前提是要知道枚举类里类型一定是这个类的若干实例...JDM提供了枚举类型也可用在switch中,比如我们的加减乘除。我们可以在里面实现这样的switch 功能。

    31640

    为什么建议你使用枚举?

    用法一:常量 在 JDK 1.5 之前,我们定义常量都是 public static final......,但有了枚举,我们就可以把这些常量定义成一个枚举类了,实现代码如下: public enum ColorEnum { RED, GREEN, BLANK, YELLOW } 用法二:switch...假如不使用枚举 在枚举没有诞生之前,也就是 JDK 1.5 版本之前,我们通常会使用 int 常量来表示枚举,实现代码如下: public static final int COLOR_RED = 1;...: 第一, int 类型本身并不具备安全性,假如某个程序员在定义 int 时少些了一个 final 关键字,那么就会存在被其他人修改的风险,而反观枚举类,它“天然”就是一个常量类,不存在被修改的风险(原因详见下半部分...而不是直接使用枚举的字段,实现示例代码如下: public class EnumTest { public static final String COLOR_RED = "RED";

    22550

    为什么建议你使用枚举?

    用法一:常量 在 JDK 1.5 之前,我们定义常量都是 public static final......,但有了枚举,我们就可以把这些常量定义成一个枚举类了,实现代码如下: public enum ColorEnum { RED, GREEN, BLANK, YELLOW } 用法二:switch...假如不使用枚举 在枚举没有诞生之前,也就是 JDK 1.5 版本之前,我们通常会使用 int 常量来表示枚举,实现代码如下: public static final int COLOR_RED = 1;...: 第一, int 类型本身并不具备安全性,假如某个程序员在定义 int 时少些了一个 final 关键字,那么就会存在被其他人修改的风险,而反观枚举类,它“天然”就是一个常量类,不存在被修改的风险(原因详见下半部分..."; public static final String COLOR_GREEN = "GREEN"; 但是这样同样存在一个问题,有些初级程序员会不按套路出牌,他们可能会直接使用字符串的值进行比较,而不是直接使用枚举的字段

    39930

    深入分析 Java 的枚举 enum

    所以在 emum Gender 那个枚举中的成员 Male 相当于是 public static final Male = new Gender$1("Male", 0); //而不是 new Gender...用法二:switch JDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强。...EnumSet保证集合中的元素不重复;EnumMap中的 key是enum类型,而value则可以是任意类型。...name变量就是枚举变量的字符串形式。 还有一些其他的方法我就暂时不介绍了,感兴趣的话可以自己去看看文档或者源码,都挺简单的。 要点: 使用的是enum关键字而不是class。...(java是单继承,它已经继承了Enum),可以添加其他方法,覆盖它本身的方法 switch()参数可以使用enum values()方法是编译器插入到enum定义中的static方法,所以,当你将enum

    2K30

    Java枚举细节

    就像如下的形式: void f(Color c) { switch (c) { case RED: System.out.println("It's RED"); break;...我们可以看到,枚举类实际上在编译的过程中,被编译器进行调整,它并不是一个新的类型,本质上依然是一个类(Color),这个类继承了java.lang.Enum,而对于每一个枚举常量,实际上是public...反编译的过程我们可以看到,我们的枚举常量实际上是我们枚举类的静态实例化对象,在编译器的修改下,我们运行加载枚举类的过程中,枚举常量是static修饰的,其他静态域也是static修饰的,枚举常量又排在其他静态域的前面...,但是存在问题:枚举常量越来越多,case会不断增长,如果编写代码的过程由于不注意,增加颜色常量的时候,忘记了增加对应的case,那么编译是不会有任何的问题的,但是却隐含的将增加的颜色常量也返回的是BLUE...如果我们新添加了枚举常量,而没有实现该方法,编译器会报错警告我们。

    21320

    掌握Java枚举这几个知识点,日常开发就够啦

    Shrubbery是java.lang.Enum的子类。 Shrubbery定义的枚举值都是public static final修饰的,即都是静态常量。...因此,枚举类方法values()返回enum枚举实例的数组是不是豁然开朗啦。 四、枚举类的优点 枚举类有什么优点呢?就是我们为什么要选择使用枚举类呢?...五、枚举的常见用法 enum组织常量 在JDK5之前,常量定义都是这样,先定义一个类或者接口,属性类型都是public static final......,有了枚举之后,可以把常量组织到枚举类了,如下: enum SeasonEnum { SPRING,SUMMER,FALL,WINTER,; } enum与switch 环环相扣...一般来说,switch-case中只能使用整数值,但是枚举实例天生就具备整数值的次序,因此,在switch语句中是可以使用enum的,如下: enum OrderStatusEnum { UNPAID

    89120

    夯实Java基础系列12:深入理解Java中的反射机制

    常量 { } enum Color { Red, Green, Blue, Yellow } switch JDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强...public static void showColor(Color color) { switch (color) { case Red:...[image] 枚举类型对象之间的值比较,是可以使用==,直接来比较值,是否相等的,不是必须使用equals方法的哟。....Day$1); static {}; } 可以看到,一个枚举在经过编译器编译过后,变成了一个抽象类,它继承了java.lang.Enum;而枚举中定义的枚举常量,变成了相应的public static...从Enum类中我们可以看到,为每个枚举都定义了两个属性,name和ordinal,name表示我们定义的枚举常量的名称,如FRIDAY、TUESDAY,而ordinal是一个顺序号,根据定义的顺序分别赋予一个整形值

    1.6K00

    如何更好的定义枚举

    用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fianl.... 。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。...EnumSet保证集合中的元素不重复;EnumMap中的 key是enum类型,而value则可以是任意类型。...关于这个两个集合的使用就不在这里赘述,可以参考JDK文档 枚举和常量定义的区别 一、 通常定义常量方法 我们通常利用public final static方法定义的代码如下,分别用1表示红灯,3表示绿灯...你必须确保是int 其次,你还要确保它的范围是0和1 最后,很多时候你打印出来的时候,你只看到 1 和0 , 但其没有看到代码的人并不知道你的企图,抛弃你所有旧的public static final常量...(java是单继承,它已经继承了Enum),可以添加其他方法,覆盖它本身的方法 3. switch()参数可以使用enum了 4. values()方法是编译器插入到enum定义中的static方法,所以

    1.1K90

    java enum(枚举)使用详解 + 总结

    原始的接口定义常量 2. 语法(定义) 3. 遍历、switch 等常用操作 4. enum 对象的常用方法介绍 5. 给 enum 自定义属性和方法 6....枚举类型符合通用模式 Class EnumEnum>,而 E表示枚举类型的名称。...遍历、switch 等常用操作 对enum进行遍历和switch的操作示例代码: public class Test { public static void main(String[] args) {...int ordinal() 返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。 String toString() 返回枚举常量的名称,它包含在声明中。...总结 可以把 enum 看成是一个普通的 class,它们都可以定义一些属性和方法,不同之处是:enum 不能使用 extends 关键字继承其他类,因为 enum 已经继承了 java.lang.Enum

    1.2K10

    你需要知道的Java枚举知识

    枚举类型符合通用模式Class EnumEnum>,而E表示枚举类型的名称。...public static final,必须要位于枚举类的第一个语句 枚举类可以定义自己的成员变量、成员函数和带参构造方法,自定义带参构造方法时,枚举值需要传参 枚举类可以存在抽象的方法,但是枚举值必须要实现抽象的方法...主要应用 表达常量 在Java 5之前,定义常量的最佳方式是在final修饰的常量类中定义:public static fianl...修饰的属性,且须将构造方法设为private。...代码示例如下: public final class ColorConst { public static final int RED = 1; public static final...int GREEN = 2; public static final int BLUE = 3; private ColorConst() {} } 但,不建议在接口中定义常量。

    58320
    领券