首页
学习
活动
专区
工具
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逻辑统一写在该枚举类内部

95440

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是一个顺序号,根据定义顺序分别赋予一个整形值

65900

【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.3K41

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

18040

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 修饰.

68420

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 功能。

30140

为什么建议你使用枚举?

用法一:常量 在 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";

20450

为什么建议你使用枚举?

用法一:常量 在 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"; 但是这样同样存在一个问题,有些初级程序员会不按套路出牌,他们可能会直接使用字符串值进行比较,不是直接使用枚举字段

37830

深入分析 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

1.9K30

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...如果我们新添加了枚举常量没有实现该方法,编译器会报错警告我们。

20020

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

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

84420

夯实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 Enum>, 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 枚举

java.lang.Enum { /* 定义了三个常量,即为我们在定义时书写三个枚举常量 */ public static final enum_.TestEnum...X; public static final enum_.TestEnum Y; public static final enum_.TestEnum Z; /* 编译器生成静态代码块...可以看到,Enum 类本身提供了两个属性(name 和 ordinal)来标识某个枚举对象,name 即为该枚举对象名字, ordinal 为该枚举对象所在所有枚举常量序号(从 0 开始,比如上述枚举常量...枚举和 switch 我们都用过 switch 语句,对于普通常量int 等)使用 switch 语句时其直接将 switch 中引用值和 case 中引用常量值一一比较。...如果 switch 引用是 String 对象,则通过该对象 hashCode 方法返回值和 case 中 String 类型常量 hashCode 方法返回值进行比较,同时在比较完成后还会使用

1.3K20

你需要知道Java枚举知识

枚举类型符合通用模式Class Enum>,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() {} } 但,不建议在接口中定义常量

53420
领券